1954

Thoughts, stories and ideas.

AIKATSU! STREAMというChrome extensionを作った

生産性をあげるため、アイカツ!のライブシーンを延々と再生し続けるAIKATSU! STREAMというChrome extensionを作りました。

dアニメストアへのログインが必要です)

chrome.google.com

とはいえ、jsで動画を解析してライブシーンを抜き出すようなことをしてるのではなく、各話のライブシーンの開始/終了をあらかじめ(人力で)抜き出してあって、それを元にシークしているだけです。

いまのところプレイリストに含まれるのは第一部のみです。dアニメストアには第二部〜スターズもあるので、やる気が出たら追加します。

そして後から気づきましたが、YouTubeaikatsuTV channelでも十分だったかもしれない...

2017年の振り返り

1-3月

4-6月

7-9月

  • オプトを退職
    • 2016年1月から在籍していたオプトを退職しました。
    • とても暖かく送り出していただき、感謝の念に堪えません。
    • 実はオプトのOSSのメンテナーは続けてたりします。

10-12月

  • LINE株式会社に入社
    • 1ヶ月有休消化したのち、10月からLINEで働き始めました。
    • 強い人たちばかりで、がんばるぞいという気持ちです。
    • アドカレ記事を書いたりしました。 engineering.linecorp.com
  • ISUCON7予選に参加
    • 初ISUCON参加でした。
    • 結構色々なチームがハマってたのと同じく、帯域律速を突破できずにあえなく敗退...
    • でもまた参加したい。

反省点

  • 音楽を全然やっていない。

来年

  • 仕事頑張る
  • 音楽やる
  • なんかすごいもの作る
    • 自分は音楽は聞くのもやるのも好きなんですが、音ゲーは全然っていう性質でして、そんな自分がハマれる音ゲーを作りたい。
    • いちおう2016年にspeedballっていうアプリ作ったんですが、これはまったく面白くなかったので...(実際の楽譜がそのまま音ゲーの譜面、っていうコンセプトを入れたいだけだった)

JavaとしてもScalaとしてもコンパイルできるHelloWorld

タイトルの通り、以下のコードはJavaとしてもScalaとしてもコンパイルできます。

/*/**/
class JavaMain {
    public static void main(String args[]) {
        System.out.println("Hello, World");
    }
}
// */

/*/**/
class App {}
// */

/*/**/
class A {
    int object = 1;
    int ScalaMain = 1;

    void foo() {
        int i =
        // */
        object
        /*/**/
        ;

        i = // */
        ScalaMain
        /*/**/
        ;
    }

    class B // */
    extends App {
        /*/**/
        void bar() { // */
            System.out.println("Hello, World");
        /*/**/ } // */
    }
/*/**/
}
// */

↑をPolyglot.java, Polyglot.scalaとして保存して試してみましょう。

$ javac Polyglot.java
$ java JavaMain
Hello, World
$ rm -f *.class
$ scalac Polyglot.scala
$ scala ScalaMain
Hello, World

わぁい動いた!

Java, Scalaのバージョンは以下です。

$ javac -version
javac 1.8.0_77
$ scalac -version
Scala compiler version 2.12.3 -- Copyright 2002-2017, LAMP/EPFL and Lightbend, Inc.

解説

ScalaJavaにおける、ブロックコメントの挙動の違いがポイントです。

Scalaでは、ブロックコメントをネストさせた場合に/**/の対応をきちんと取りますが、Javaでは、何個/*を開こうが、*/が来た時点でブロックコメントが終了します。

Java:

/* -- (1)
  /*
   */ -- (1)が閉じる
 */ -- 余ってるのでsyntax error

Scala:

/* -- (1)
  /* -- (2)
   */ -- (2)
 */ -- (1)

これを利用すると、javacにだけ認識されてscalacには無視されるコードを書くことができます。

いっぽう、scalacにだけ認識されるコードを書くのは難しいので、javacでコンパイルできるようにうまいこと色々足しています。

  • L2..L6: javacだけに認識されるMainクラス
  • L10: scala.Appを使ってScalaのMainクラスを作るので、javacで通るように空のAppを用意しておく
  • L14..L39: javacで通るように色々挟みながら、object ScalaMain extends App { System.out.println("Hello, World"); }と書いている

まとめ

今回のコードはもちろんGroovyでもコンパイルできるので、Java, Scala, GroovyのPolyglotができたことになります。

同じ感じでKotlinもいけるかな?

Ammonite REPLで任意のclasspathを追加する

MavenやGradleプロジェクトでも、sbtみたいに手軽にREPLで動作確認したいときがあります。

お手元の開発環境にAmmonite REPLを入れておけば、以下のようにScalaを使って動作確認できるので便利。

$ amm
Loading...
Welcome to the Ammonite Repl 1.0.2
(Scala 2.12.3 Java 1.8.0_144)
If you like Ammonite, please support our development at www.patreon.com/lihaoyi
@ interp.load.cp(ammonite.ops.Path("/path/to/classes"))

@ import com.example.MyClass

/path/to/classesは、Mavenプロジェクトだったらtarget/classesだし、Gradleプロジェクトだったらbuild/classes/mainあたりになるでしょう。

ソース書き換えたらまた読み込み直さないといけないのが面倒ではありますが。

アイカツ!の曲のかっこよさについて

この記事はアイカツ! Advent Calendar 2017の25日目の記事です。

はじめに

女児向けアーケードゲームやアニメには、そのターゲット層とは裏腹に、コアな音楽ファンをも虜にするような楽曲を繰り出してくる作品が少なくありません。

とりわけアイカツ!は、曲調の多彩さやクオリティにおいて群を抜いている印象があります。

この記事では、アイカツ!の中でも筆者が特に好きな二曲「KIRA☆Power」「フレンド」を題材として、 そのかっこよさの分析を試みます。

1. KIRA☆Power

KIRA☆Powerはアイカツ!第2シーズンのOPで、このジャンルのアニメには珍しいアップテンポなEDMナンバーです。

www.youtube.com

作曲はサウンド制作会社MONACA所属の石濱 翔さんです。

ダブステップ

爽快感溢れるイントロ〜Aメロを抜けてBメロに入ると、Skrillexばりのキレのあるダブステップに度肝を抜かれます。

ダブステップを打ち出したアイドルソングとしてはきゃりーぱみゅぱみゅの「インベーダーインベーダー」やモーニング娘。の「恋愛ハンター」などが思いつきますが、女児アニメではなかなか珍しいのではないでしょうか。

また、Bメロでビートを1/2にするアニソンの常套パターンが、KIRA☆PowerではFour on the floorとダブステップによって実現されており、新鮮さを感じます。

ちなみに、同じく石濱さん作曲によるアイカツスターズ!ED「episode Solo」もWobble Bassが唸りまくるナンバーで、こちらはさらにダブステップ色が強くなっています。

www.youtube.com

音色

KIRA☆Powerは、BメロのWobble Bassはもちろん、曲全体を通して、シンセサイザーの音色がとても心地よいところも特徴的です。

石濱さんご自身のtweetによると、Massiveというシンセサイザーを主に使用しているようです。

自分でも使ってみたくなりますね。

サビのコード進行

サビは「叶えましょう」の音形がモチーフとなって繰り返されるようなメロディですが、ここで注目したいのがコード進行です。

以下は、「叶えましょう」のトップノート(B)が、各繰り返しにおいてコードのどの部分に当たるかを表にしたものです。(歌詞の引用は何かとめんどいことになりそうなのでしませんが)

コード Bのコード中の位置
AM7 9th
C#m7 m7th
G#m7-5 m3rd
AM7 9th
C#m7 m7th
CM7 M7th

メロディを特徴付ける伸ばし音であるBが、このように役割を変えていくことで、色彩豊かに感じます。

こういった、EDMらしからぬコード進行の妙技も大きな魅力です。

2. フレンド

2曲目は、98話のトゥインクルスターカップにおいて2wingSが歌った「フレンド」を取り上げます。

www.youtube.com

作曲は山崎佳祐さんです。

ソウルっぽさ

ふうりさんのソウルフルな「Hey!」とともに、ミディアムテンポの16beatが始まります。

力強い歌声とTp + Tb + T.Saxによるホーンセクションが、Four on the floorに組み合わさることで、ソウルを想起させながらも、アイカツらしくダンサブルな曲となっている印象です。

くわえて、ブレイクをともなうAメロのリズムは、Michael JacksonのRock With Youを彷彿とさせます。

www.youtube.com

ギターソロ

残念ながら上記YouTubeの動画ではカットされていますが、Fullバージョンには、ガットギターによる秀逸なソロが収録されています。

CMajorキーのサビから短三度上に転調し、ダイアトニックスケールをベースとしたソロを展開したのち、再度CMajorのサビに収束して完結する小気味よいソロとなっています。

同じく若干Jazzyな風味のガットギターソロがあるアイドルソングといえば、モーニング娘。の「Memory 青春の光」が思い起こされます。

www.youtube.com

まとめ

もちろんこれらの要素を持っているからといって名曲になるわけではなく、結局は曲を制作された方たちのセンスによるものと言ってしまえばそれまでなのですが、特徴的な点も多々あることが分かりました。

これからもアイカツ!アイカツスターズ!)の曲からは目が離せません。