読者です 読者をやめる 読者になる 読者になる

算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

「Kotlinスタートブック - 新しいAndroidプログラミング」を執筆したよ〜

Kotlin Android 個人的な話

こんにちは、Kotlinエバンジェリスト(自称)のたろーです。 「Kotlinスタートブック - 新しいAndroidプログラミング」というタイトルで、国内初となるKotlin入門書を執筆させていただきました。 リックテレコムさんより出版されます。7月17日発売予定です!

タイトルに「Android」と含まれていますが、Kotlin文法もがっつり解説しているので、Android開発者以外にも十分役立つと思います!

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

本書の内容

Kotlinというプログラミング言語の解説書です。 3部構成になっています。

第1部

導入部分です。 概要・背景、Hello Worldなどで、Kotlinとはどういうプログラミング言語かを簡単に紹介します。 そして文法や機能を俯瞰するために、分数クラスを作るガイドツアーがあります。

第2部

Kotlinの文法や機能を詳細に解説します。 ラムダ式高階関数に初めて出会う人のために、順序立てて丁寧に解説しています。 Null安全、クラスデリゲーション、変位指定などのKotlin独特の機能も、注意深く、例を交えながら説明しています。 教科書としてだけでなく、リファンレスとしても役立つでしょう。

第3部

KotlinによるAndroidプログラミングを解説します。 単純な例ではなく、実際のアプリ開発でのKotlinの使い方を学ぶことができます。 また、KotlinコードからJava APIを呼び出したり、Java用ツールやフレームワークからKotlinコードが呼び出されたりといった相互運用性についても解説しています。 Dagger2, Ankoなどのライブラリや、テストについても言及しています。

付録

本紙では拾いきれなかった細かいトピックを解説します。 例えば、リフレクションや演算子オーバロードの対応表などです。

書評

LINE BOT「親切なDおじさん」を開発したよ〜

Web API プログラミング その他

f:id:ngsw_taro:20160413080231j:plain:w240

LINEのBOT APIがTrialとして無料で個人で使えるようになったので、さっそく試してみました。

つくったもの

某テーマパークのアトラクションの名前をつぶやくと、その待ち時間や運転状況を教えてくれるBOTを作りました。 その名も「親切なDおじさん」! 検索用IDは公開していませんが、一部の友人には教えています。 完全にネタで、実用性があるかと言われると...なさそう。

このBOTよりももっと便利な「夢と魔法の待ち時間」というAndroidアプリを趣味で作っているので、 実際にパークで活用したいなら、そちらをぜひ。

最初の構成

さくらのVPSを利用しているので、そこに載せるつもりでした。 Let's Encryptという、無料でSSLサーバ証明書を発行できるサービスを使えば上手くいくものだと思っていました。 が、他の多くの方々と同じように、Let's EncryptがLINE APIで使えないことがわかり、自分のサーバでやることを諦めました。

アプリ側は、Kotlin + wasabiで開発するつもりでした。 wasabiは、Kotlinで記述されたKotlinのための、Sinatraインスパイア系Webフレームワークです。 まだ開発途上にあって、生のリクエストボディを取得できない問題があって(調査不足かも。ご存知の方教えて><)使うのを断念。。 次にSparkApache Sparkじゃないよ)という、これまたマイクロなフレームワークを使おうとしました。 実際使ったのは今回が初めてでしたが、素直で使い易い印象を受けました。

結局

Herokuを使いました。 これでSSLはクリア。

次に、サーバのIPアドレスホワイトリストとして、LINE APIのダッシュボード上に登録する必要があります。 すなわちIPアドレスが固定である必要があります。 どうやらHerokuはIPアドレスが変わってしまうことがあるらしいので、Fixieというアドオン?というかサービスを経由してAPIを叩くことにしました。

で、次に問題になったのが、Java(Kotlin)でのSSL対応プロキシ。 面倒だし難しいしで、結局Javaからは離れることにしました。 最終的に、生JavaScriptExpressに落ち着きました。

雑感

SSL証明書固定IPアドレスさえ乗り越えれば、API使うだけなので簡単でした。

現状、TrialのLINE BOT APIには制限があるし、マネタイズとか難しそうでオモチャの域は超えないから、Herokuやらに課金するモチベーションにはならないかもです。

個人的には、通常ユーザとBOTが対等じゃないのが好きじゃないですね。 Twitterみたいに、通常ユーザとしてアカウント作って、そいつが自動で動く、みたいな方が面白いし、何かと融通効きそう。

あと、グループトークにBOTって追加できるんですかねぇ?

私のハッシュタグ活用術とビズリーチ勉強会に参加した話 #biz_kt

Kotlin イベント/カンファレンス Twitter

f:id:ngsw_taro:20160408225433j:plain

今日、ビズリーチさんの社内勉強会でKotlinについて発表してきました。 @takezoenさんからオファーをいただいたときは驚きましたが、とても楽しく発表させていただきました。

講演、執筆の依頼は、いつでもお待ちしていますので お気軽にお声かけください!

本日の資料はこちらです。

ハッシュタグ活用術

今日の勉強会で「ハッシュタグ #biz_kt でツイートしてね!」と言ったところ、「こんなの初めての試みだ」という声をいくつか聞きました。 私は発表するときに、よくハッシュタグの案内をすることにしています(@yusuke師匠の教え)。 ハッシュタグがあることで、より盛り上がったり、勉強会に参加していない人にも伝わったりと、いろいろいいことがあります。 ハッシュタグに関して、私が工夫していることを列挙します。

ハッシュタグ付きのツイートが多ければ、その勉強会は大成功と言えると思います。 みなさんもぜひハッシュタグを活用してみてください!

京都のKotlin勉強会で発表してきたよ〜 #kotlin_kansai

Kotlin イベント/カンファレンス

f:id:ngsw_taro:20160403173624j:plain

昨日、「Kotlin 1.0リリース記念勉強会 in 京都」に参加してきました!

経緯

Kotlin 1.0のリリースを記念して、関西でKotlin勉強会を開催するから登壇してほしいと @backpaper0さんからオファーをいただきました。 Kotlinコミュニティには協力したいし、関西の方々と会いたいし、そもそもKotlin好きだし、二つ返事でお受けしました。

参加者が40人以上という、わりと大きな会で、Kotlinを触ったことのない方も多く参加されると思い、 エバンジェリストの私には、Kotlinの導入部分や全体的な話を期待されているのかと思っていました。 しかし、@backpaper0さんに「初心者向けではなくて、初歩的でもない内容がいい!」と言っていただいたので、 意気揚揚とネタを練りました(発表資料は下に貼ってます)。

旅費の工面

私の所属しているエムスリー株式会社に、交通費・宿泊費を出してもらいました。 弊社でKotlinを開発に使用していることと、ゲストスピーカーとして参加するということで、快諾してくれました。

We're hiringです。 あなたとエムスリー いますぐジョイン

勉強会

会場提供は、株式会社はてな様です。 キレイなオフィス&無料自販機サイコー!

勉強会は大盛況でした。 セッション数は8個で、バラエティに富んだ内容でした。 また、参加者の皆様のノリもよく、登壇者としては非常に話しやすいムードでした。

私は「攻める!ラムダ式禁止おじさん」というタイトルで、 Kotlinでラムダ式を使わずに頑張る方法について発表しました。 スライドはこちらです。

カリー化について(35ページ)、ご指摘をいただいたので、誤解のないように説明します。 この関数invokeは「カリー化を行う関数」ではありません。 スライドにも書いてますが「カリー化してるっぽく見せるための関数」です。 単なる部分適用に他ならないのですが、2引数関数の拡張関数としているのがミソです。 拡張関数ではなかったらinvoke(::minus, 5)のような呼び出しになり、「全然カリー化じゃないよね」となりますが、 拡張関数なので(::minus)(5)と書けて、「カリー化っぽい!」となるわけです(ならない?)。

2引数関数のカリー化を行う関数は、次のように書けます。

fun <A, B, R> ((A, B) -> R).curried(): (A) -> (B) -> R =
        { a: A -> { b: B -> this(a, b) } }

スライドにあるような3.let((::minus)(5))は、3.let((::minus).curried()(5))と書けます。

最後は、Kotlinポーズ(@yusukeさん考案)で締めました。

懇親会(というか飲み会)

関西のエンジニアの憩いの場(?)である、和知さんで懇親会をしました。 @daiksyさんにおすすめビールを教えていただき、@s_kozakeさんとジャンジャン飲みました。 お料理も、いろんな種類のビールも美味しかったです。

乾杯の様子。

京都観光

勉強会の翌日(今日)は、京都を観光しました。 中学の修学旅行以来だったので、すごく楽しかったです。 桜がキレイだった!

清水寺からスタートして、近辺を散策しました。 なんか抹茶をタダで飲めたのラッキーでした。

おわりに

運営スタッフの皆様、会場提供のはてな様、登壇者・参加者の皆様、ありがとうございました! すごく楽しかったです!(関西には良い思い出しかないッ!) 次回もできれば参加したいです!

(Special Thanks: @yusukeさん、@s_kozakeさん、@tan_go238さん。 懇親会やその後に、特にお世話になりました。ありがとうございました!)