Dog Driven Development

プログラミング関連で試行したことや、勉強会参加の記録を残していきます。

ほぼAndroid初心者の私がDroidKaigi2016で学んだこと

droidkaigi.github.io

2/18,19の2日間、Android開発者のイベントであるDroidKaigiに参加してきました。

普段はWebアプリの開発が中心で、業務内でのAndroid開発はつい最近始めたばかり、プライベートではちょっとしたアプリ(WebのAPIをちょっと叩くやつとか)を作ったりした程度の知識だったのでどれだけ話についていけるか不安は大きかったのですが、結果的に初心者からのステップアップに役立ちそうな情報を多く手に入れることができました。
参加して本当によかったと思っています。

そんな、ほぼAndroid初心者の私から見てとても参考になったセッションの情報をいくつか挙げて簡単にまとめてみました。

Android Lintで正しさを学ぼう

www.slideshare.net

Android Lintを使うとAndroid開発でのアンチパターンや凡ミスを検出できるので、品質の指標にもなるし積極的に使っていこうといった内容でした。

スライドの中で紹介されていた事例は、初学者がやりがちな凡ミスが半分ぐらいだったり、知らないとやらかしそうだと思えるものが多くありました。

お作法的なところを調べるのは結構時間かかったり見落としたりしがちなので、Android初心者はlintしながら開発すればAndroidの学習速度も早くなりそうです。 簡単に利用できるので、積極的に使っていこうと思います。

2日目基調講演 第1部「Support Libraryノススメ」 第2部「Support Library Internal」

サポートライブラリ DroidKaigi 2016
※リンクを貼っておいてアレですが、私の環境ではうまく動いてくれずスライドの内容が確認できませんでした。。。

Support Libraryは基本的にAndroid SDK後方互換性を保つものということから、Material Designの実装が容易にできる補助的な機能も提供しているという紹介をしている内容のセッションでした。
compileSdkVersionとライブラリでメジャーバージョンは一致させる必要があるというお作法的な話から、各ライブラリごとに提供している機能の説明を聞けて、今後の利用の参考になりました。

他のセッションで聞いた内容も考慮すると、特別な理由がない限りは基本的にSupport Libraryを使った実装を行うのがよさそうだと思いました。

パフォーマンスを追求したAndroidアプリを作るには

speakerdeck.com

いくつかの観点を挙げ、それらに対して比較的簡単に実施できるパフォーマンス計測方法と改善についての情報がまとまっているセッションでした。

パフォーマンスに関するものは必ずどこかでぶつかる問題ですし、そういったところに早期から目が行くようになれば初心者がやりがちなまずい実装を避けることができそうです。

また、簡単に計測できる方法というのが非常に良いと思います。 めんどくさいというだけでやらない理由としては十分ですからね。。。

Android Dev Tools Knowledge

www.slideshare.net

Android開発における便利ツールAndroid Studioプラグインの紹介のセッションでした。
Android Studioプラグイン、たくさんあることは知っていましたがPostfix CompletionやAndroidWiFiADBぐらいしか詳細を把握していなかったので、こういう形でまとめていただけるのはほんとにありがたいです。
デバッグ関連のツールも結構紹介されているので、このあたりの情報を使って開発に慣れていこうと思います。

他にも学んだことはありますが、雑なまとめとしては以下のような感じですね。

  • コード書いたらAndroid Lintする。これだけで解決できることは多い。
  • 基本的にはSupport Libraryを使った実装にする。
  • ある程度簡単にパフォーマンス計測できる方法があるので、継続して計測し改善に努めよう。
  • めんどくさい作業を効率化するツールはたくさんあるので、有効活用するべき。

…理解しきれなかったものもそれなりにあったので、しばらくは開発して慣れてからスライドを再度見てみようと思います。

第3回かわいいKotlin勉強会に参加しました

kotlin.doorkeeper.jp

DroidKaigiでのたろうさん(@ngsw_taro)の発表でこの勉強会の存在を知り、参加してきました。

発表者の方のスライドは主催のたろうさんがブログでまとめてくれています。
ありがたい!!

taro.hatenablog.jp

参加してみて

発表された内容はどれも個性があり、参考になるものばかりでした。
仕事で会場に到着するのが少し遅れてしまったため、たろうさんの発表をdataアノテーションのあたりから聞くことになってしまったのがかなり残念でしたが、Java→Kotlinの変換やAltJSとしてのKotlinなど特に気になっていた部分の発表を聞くことができてよかったです。

また、参加者の方はAndroidな方々が多かったようです。
よく言われる、AndroidがJava8に対応していないが、kotlinならラムダ式が使える~あたりがメリットとして大きいのでしょうかね。

ちなみに、私は仕事では主にPHPJavaのWebアプリケーションの対応をしており、Androidにはあまり縁がなかったりします。
個人的にAndroidの開発はやってみたいので、今年中にはkotlinでアプリを書いてplayストアに載せるところまでやりたいですね。

懇親会にも出てみましたが、新しめの言語の勉強会ということもあってか、参加されてる皆さんの実力の高さが垣間見えました。
特に、発表者の方々は個性が強かった印象があります。
よい刺激を受けることができた勉強会でした。

Kindleセールで買った技術書やらを並べてみた(雑記)

www.amazon.co.jp

現在(5/31)、Kindleでポイント還元セールをやっているようです。
しかも、ほとんどのKindle本が対象のようです。
欲しい本や気になっていた本がいろいろとあったので、一気に購入して3万円ほど出費してしまいました。

今回みたいに、セール対象が広い場合は皆何を買うんだろう?と疑問に思ったので、 とりあえず自分が購入したものを公開してみることにしました。

こんな本あるんだーといった感じで参考になればいいかなと思ってます。

言語関連

AWK実践入門 (Software Design plus)

AWK実践入門 (Software Design plus)

シェルプログラミング実用テクニック (Software Design plus)

シェルプログラミング実用テクニック (Software Design plus)

業務でちょいちょいawkシェルスクリプトを使うことがあるのですが、 とても便利なのでもっと勉強したいと思い購入。
シェル芸もまだまだうまくできないので、これ読んでシェル芸人として成長したいですね。

Effective Ruby

Effective Ruby

Rubyは学生の頃にちょっとかじった程度なので、それなりに書けるようになりたいですね。

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

自分の中でのJavaは6で止まっているので、6以降のJavaを覚えたいと思い買いました。

Webフロントエンド関連

Web Designing 2015年3月号 [雑誌]

Web Designing 2015年3月号 [雑誌]

Web Designing 2015年6月号 [雑誌]

Web Designing 2015年6月号 [雑誌]

Webフロントエンドをそれなりにできるようになりたいので購入。 今はほんとだめなんで…

その他

システムテスト自動化 標準ガイド CodeZine BOOKS

システムテスト自動化 標準ガイド CodeZine BOOKS

その数式、プログラムできますか?

その数式、プログラムできますか?

いろいろ覚えたいことはあります。

その他(デザイン全般)

伝わるデザインの基本 よい資料を作るためのレイアウトのルール

伝わるデザインの基本 よい資料を作るためのレイアウトのルール

たのしいインフォグラフィック入門

たのしいインフォグラフィック入門

デザイン関連は、仕事にかなり応用が効くと思っています。
それだけでなく、私生活にも取り入れることができるので、ものにできればかなり役立つと思ってます。
早いうちに身につけておきたいですね。


Webやモバイル(Androidあたり)アプリ開発・デザインに興味があるので、よさげな本が他にあれば教えていただけるとありがたいです。

応募期間終了したけどパイザオンラインハッカソン5をPHPでやってみた

今回はレナルートでやってみました。
こっちのほうが気持ち難しめかも?

1問目解答

2問目解答

3問目解答 gist.github.com

PHP5.5使ったことなかったんで少し調べながらやっていたのですが、ジェネレータ便利っすね… メソッドをジェネレータとして定義するときは、メソッド名をgenerateから始めるとかジェネレーターだと一目でわかるようなネーミングしたほうがいいかもしれないですね。

そして、まったく関係ないのですがIntelliJのGist作成機能を初めて使ってみたらこれがまた便利。 なぜ今まで使わなかったんだ…

ちょっと試したコードをGistに上げるのには最適ですね。積極的に使っていこう。

パイザオンラインハッカソン5をJavaScriptでやってみた

paiza.jp

タイトルの通りです。
とりあえず幼馴染ルートでやってみました。
ルートによって4問目の内容が変わるんですかね?

1問目

gist.github.com

2問目

gist.github.com

3問目は省略

4問目

gist.github.com

感想

Node.jsというかJavaScript自体は、それなりに書くようになったのは半年前ぐらいだったりします。

今回どれだけ書けるかやってみたのですが、普段ライブラリ(lodashとか)を利用して書いてる箇所をライブラリなしで綺麗に書くにはどうすればいいか悩んだりすることがいくつかあり、言語の習得(特にES5の仕様)がうまくできてないと感じました。

結果的に、JavsScriptの言語仕様・APIをおさらいするよい機会になりました。
また、こういう競技プログラミング的なもの?は別言語の新規習得にも使えるのではないかと感じました。

問題自体は前回のPOHよりは簡単な感じがしました。
4問目はもっときれいに書けるんだろうなあとは思っています…

あとで、別言語でもやってみる予定です。

VagrantとAnsibleを使ってpaizaの実行環境を構築できるようにしてみた

本題の前に

先日、このツイートを何気なくRTしたのですが、なんとAmazonギフト券が当たってしまいました。
ありがとうございました!!

数年前にもVPSを契約してクリスマスケーキを当てたりしているので、こういうものに縁があるのかもしれないですね。

本題

paizaというプログラムを書いて転職活動を行うサービスがあるのですが、
転職に直接関係ないイベントも定期的にやっていたりします。

GW中の暇つぶしにこれをやろうと思っていたのですが、今ある環境とpaiza側の実行環境で言語のバージョン差異があったので、 別途VMを立ててpaiza側の実行環境を可能な限り再現してみました。

Ansibleの学習も含めて自動化してみたので公開してみます。

github.com

README.mdに書いていますが、Vritual BoxとVagrant 1.5以上をインストールしておく必要があります。

やってること

vagrant upすると、Vagrant CloudからBoxを取得してVMを立ち上げてくれます。
立ち上げたVMにAnsibleをインストールして、リポジトリにコミットしておいたplaybookを実行するようになっています。
ちなみに、今のところplaybookではnode.jsとRubyのインストールしかやっていません。

また、playbook実行前にAnsible GalaxyからRoleを取得しています。
今回は、node.jsインストールのRoleだけ簡単に自作して、RubyのRoleはAnsible Galaxyにあったものを使っています。

Ansible Galaxyに一通り言語インストール用のRoleがあるようなので、多くの言語に対応するのはそこまで時間がかかりそうにないです。
便利な時代ですね。

Vagrantを使って構築すること前提でplaybookを書いていますが、少し書き換えればそれ以外の環境にも利用できると思います。
※node.jsのRoleだけとりあえず動く程度の出来なので怪しい...

そのうち、JavaPHPにも対応させる予定です。

AngularJSテストソンに参加してきた

つい1週間ほど前の話ですが、AngularJSテストソンに参加しました。

AngularJSテストソン - AngularJS Japan User Group | Doorkeeper

当日は、始めにAngularJSのテストに関する簡単な説明とチーム分けが行われ、そこからテストコードを書いたり、参加者・主催者の方々と書き方について話し合ったりして、最後に各チームごとに実践した内容の発表を行いました。

当日作業を行ったリポジトリへのリンクも置いておきます。
shunjikonishi/AngularTestSonSample · GitHub

Javascript歴3ヶ月・AngularJS歴1ヶ月程度の知識で、どこまでのことができるか不安でしたが、AngularJSのテストの書き方からテストしやすいAngularJSの書き方などもなんとなく見えてきた1日だったので、非常に収穫のある1日になったと感じています。 簡単に感想みたいなものを書きます。  

学んだこと

  • AngularJSの書き方について

    • 当たり前のことかもしれませんが、Controllerに書いているロジックはなるべくServiceに切り出したほうがいいと感じました。普段、Controllerの中で$httpを叩いたりするコードをよく書いているのですが、これもService側に処理を切り出したほうがテストがしやすく、$httpのmockも書きやすくなるのかなと感じました。
      また、Service自体のmockを作ってユニットテスト実行時に参照することもできるらしいので、積極的にServiceに切り出したほうがテストがしやすくなるのかなと思いました。
  • CSSセレクタプログラマのみ触れるものを定義しておく

    • Dチーム(うろ覚え…)の方の発表スライドに出てきた内容。デザイナーが定義したCSSセレクタを参照するようにコードを書くと、デザイナー側がCSSセレクタの名称を変更したときにコードが動かなくなるということがある。テストコードに限った話ではありませんね。正直、まったく意識できていませんでした。
      対応策としては、プログラマ側が利用することを明示したCSSセレクタ名を定義することだそうです。(例:"js-"といった文字列をCSSセレクタ名につける等)

もっと学びたいこと

  • protractorの書き方
    • 正直、なんとなく使い方がわかる程度の状態で終わってしまったので、どういうAPIがあるかをもう少し知りたいと思っています。protractorで使われているpromiseという書き方についても、テストソンの3日前に知った程度の知識なので、この辺も含めてちゃんと理解していければと考えてます。

コードを書く勉強会は学びが多くていいですね。今後も積極的に参加していきたいです。