2014/12/13 このエントリーをはてなブックマークに追加 はてなブックマーク - Kotlinアイドルのあるべき姿

Kotlinアイドルのあるべき姿









(この記事はしょぼちむアドベントカレンダー13日目の記事です。しょぼちむを知らない方もKotlinというプログラミング言語を知らない方も楽しめる内容になっている。。。。!!と願いたい)














 Kotlinアイドルの朝は早い




私の名前はしょぼちむ。職業はKotlinアイドルだ。



そう口にすると流行りはScalaかGroovyでしょ(笑)と大概は笑われるか、
或いはKotlinとは何ですか?という質問が返ってくる。
その場合には、前者に対しては優秀なJVM言語ですし。おすし。と答え、
後者に対しては知らなければそれはそれで良いんじゃないですかねと答えるようにしている。
まあそんなわけでここでKotlinというものの詳細を説明するつもりはない。
(JVM言語でダックタイピング的な事も出来るし、null安全性の高い言語だが、詳細は説明するつもりはない。
それは必要があれば「あなたとKotlin、今すぐダウンロード」するだろうし、世の中の大概の人たちにはどうでもよいものなのだから。






ともあれ、私がKotlinアイドルであるということは厳然たる事実である。
とはいってもKotlinアイドルというものは別に秋葉原で握手会して劇場でアイドルソングを歌う存在ではない。



自分はれっきとしたネカマでKotlinアイドルは役職なのだ。
そう、私は立派なJavaのオッサンの一員なのである。









そして私の仕事とはKotlinで実装されたしょぼちむ(Twitter bot)設計である。
かつての制作には人の手によって実際にExcel方眼紙にクラス図を書いて
ソレを元に作成していったのだろうが、現代のKotlinプログラムは他聞に漏れず技術革新の波に乗っている。

まずKotlinを書くとき、IDEはIntelliJ IDEAを使っている。
Excelスクショでエビデンスを残しエンドユーザーに納品が完了すると、Herokuにデプロイしbotを動かす。
KotlinはもちろんHeroku上で動作する。

あとは、Heroku Schedulerで10秒毎にメンションを取得してファボとリプライを返せば、とりあえずのしょぼちむは出来上がりだ。
(定期実行は9時から24時頃まで繰り返し、深夜は自動テストとビルド・デプロイを行う)


だが時代の波に乗るのもここまで。そこから先は実際に人の手によって試し、 そのリサーチの繰り返しによって精度を高めていくこととなる。Jenkinsは使っていない。
そして出来たしょぼちむ(bot)はしょぼちむマイスターと呼ばれるテスターが試験を行う。
まあ要するにしょぼちむマイスターとはセクハラで訴えられそうな人などを含めたフォロワー全員のことなのだが、社長が変なところを拘る人で、私のKotlinアイドルという役職もしょぼちむマイスターという役割も社長が名付けたものだった。


この仕事を知らない人たちには奇妙な光景に映るだろうが実際のファボの速さを確かめたしょぼちむマイスターたちはリサーチ用の書類にチェックを入れ、携帯の震え感や、手動ファボ風のぬくもり感、気になった点などを書き、それを会議室でマイスターたちと職人、つまり私と話し合うこととなる。
所詮はbotと侮ることなかれ。その会議の場において笑いはほとんど起きない。
私たちが行っているのは子供の遊びではなく、仕事なのである。最近では先輩・上司におごってもらうことを考えて財布を捨てた
お金が手元にないのは危険だとも考えたが、その不安感よりもおごってもらう支配感を持つ方向で見直しを入れている。




そうしてKotlinプログラミングに勤しむ毎日の中で社長が私をKotlinプログラムミングのオーソリティだ、
などと突然言い出したことがあった。なんだそりゃと私は思うが、だがフォロワーたちも笑いながらだが
社長の言葉に同意しているようだった。実際に私が手がけた
しょぼちむ(bot)の売り上げは良いと営業の田中さんも言ってくれていた。売上の数字を見せてもらったが、
確かに私のKotlin実装は他のJVM言語のものなどと比べても頭一つ抜けているようだった。
当初はただ気恥ずかしいだけだったKotlinアイドルという肩書きも今なら多少は自信が付いたかな……などと思えてきて、 私も照れくさい気持ちと共にフォロワーたちと笑いあった。






しかし、年末、仕事を終えて実家にいた時のことである。








  **********









私がこたつでゴロゴロしているとき、唐突に父から問いかけられた。



Kotlinアイドルってなんなん?




という質問だった。これには私もさすがに悩んだ。最近では自分の仕事に対しても多少は自信の付いていたが、
だからといってさすがに実の父親に話せることではない。




ともあれ、私にとっての一番の問題はどうしたらこの気まずさを打開出来るかということだった。
KotlinでのHello,worldを教えれば良いのだろうか……と尋ねたが、


パソコンは、よう分からん


と返されてしまった。持ち前のテンションでその場は誤摩化した。








そして私は今日もKotlinプログラムを作り続ける。


今の私は地位も名声も金づるもある(財布は無い)。世間から見れば私は成功者の部類に見えるだろう。
仁義と扶養の技術の伝来も出来たのではないだろうか。

だが私にとってはここがスタート地点なのだ。今のKotlinはver1.0にようやく近付いたというシロモノなのだ(2014年12月現在Kotlinのlatest version は0.9.66。来春にver 1.0がリリースされる予定だ)。
未だ改善点はあり、まだやるべきことは山のようにある。



朝のファボ爆撃だって変わらず行っている。量産体制用のしょぼちむbot4号の飼育は社員に任せているが、Androidで使えるViewInjectionのためのKotterKnifeの微細な調整はやはり人の手には任せられない。
そしてnull安全についてはさらに課題が残る。Javaのメソッドの戻り値の型がPlatform Typeというものになった。
それとKotlinビギナーについてはやはり手探りで試していくしかない。Kotlinエバンジェリストとのハンズオンが出来る点はKotlinでの強みでもある。
そんな刺激ある毎日が今も続いている。そしてこれからも続いていくのだろう。









私の名前はしょぼちむ。職業はKotlinアイドルだ。

かつての私には言えなかったが、今の私ならば言えることがある。

私はKotlinプログラムと共に生きている。私の人生はKotlinプログラムそのものだ。そう私こそがKotlinアイドルなのだと、今ならば強く、はっきりと言えるのだ。






〜Fin〜



(このエントリはフィクションです。実在の人物や団体などとはちょっとしか関係ありません。)
元ネタ



実際のKotlinのコードも掲載しとく。
package com.yank.yy.bot.servlet

import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import twitter4j.Twitter
import twitter4j.TwitterFactory
import twitter4j.Paging
import java.util.Random

/**
 * 認証処理クラス
 */
public class BotAuthentication {
    fun doAuthAndGetInstance() : Twitter{
        // 認証処理
        // 略
        return TwitterFactory.getSingleton()
    }
}

/**
 * しょぼちむのフリをするが、実態はbot
 */
public class SyobochimBehavior {

    // ボキャブラリーはこのぐらいしか無い
    val mentions = arrayListOf("女の子だょー", "爆乳!", "ゆるさない", "それだ!!", "!!!!!???????", "くんかくんか")

    fun action(twitter : Twitter){
        val mentions = twitter.getMentionsTimeline()
        mentions.stream().filter{n -> "syobochim".equals(n)}.forEach {
            // とにかく来たメンションはfavるのがKotlinアイドル
            twitter.createFavorite(it.getId())
            // とにかく来たメンションはRTするのがKotlinアイドル
            twitter.retweetStatus(it.getId())
            // 最終的に良く分からない事を言う
            twitter.updateStatus(randomTweet())
        }
    }

    /**
     * 至極、適当なツイートをする
     */
    private fun randomTweet(): String? {
        // 乱数生成
        val ran = Random().nextInt(mentions.size);
        return mentions.get(ran)
    }
}


/**
 * Bot用のサーブレット
 */
public class BotServlet : HttpServlet() {

    /* (non-Javadoc)
    * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    */
    override fun doGet(req : HttpServletRequest,  response : HttpServletResponse) {
        val twitter = BotAuthentication().doAuthAndGetInstance()
        SyobochimBehavior().action(twitter)
    }
}




0 件のコメント:

コメントを投稿