はじめに

こんにちは。AWAでAndroidエンジニアをしている新家(r21nomi)と申します。

以前、本ブログにてiOSエンジニアの鈴木(@marty-suzuki)がiOS/Androidの業務経験のないエンジニアを対象にした開発合宿「ネイティブートキャンプ」のiOS編を紹介しましたが、本日はAndroid側の講師視点でブートキャンプの内容を紹介したいと思います。

ネイティブートキャンプとは?

iOSの記事でも説明されてますが、ネイティブートキャンプは全4回の講義+課題と2泊3日の開発合宿からなる研修プログラムで、ネイティブアプリ開発のノウハウを短期間で学ぶことを目的としたものです。
対象者はネイティブアプリ開発未経験のエンジニアで、業務では主にサーバーサイドやフロントエンドを書いていた方が多かったです。

1回の講義の中では、座学と実際にコードを書く作業をセットで行いました。
講義の最後に課題を出し、次回講義までに提出してもらうという形式で進めました。

また、研修グループ用にslackチャンネルを作り、課題の質問などはこちらを通して行いました。

IMG_7351_2

前提

講義は以下の前提のもと行いました。

  • Javaでやる(課題等はKotlinでもいいけど、資料はJavaで)
  • 言語についての説明はしない(経験ない人は事前に調べておいてもらった)
  • 設計についての話はしない(Androidならではの記法に慣れてもらうのを優先するため)
  • 原則、講義でサードパーティ製のライブラリは用いない

1日目

  • Androidについて
    android-stack_2x 2
    Platform Architecture | Android Developersから引用
  • 開発環境について
    エミュレーターの作成
    端末の開発者モード設定
    プロジェクト構成
  • プロジェクトを作ってビルドしてみる
  • レイアウトについて
    XMLの説明
    LinearLayout, RelativeLayoutでお手本通りにレイアウトを組んでみる

2日目

  • Activityについて
    ライフサイクルの話
    activity_lifecycle
    Activity | Android Developersから引用
  • Fragmentについて
    複数画面、マルチデバイス対応のためのモジュールであるという話
    Activity同様にライフサイクルを持っているが、扱いが難しい側面もあるという話
  • リソースについて
    静的ファイルを置く場所の話
    APIレベルや端末サイズ、言語によってディレクトリ分けれるから便利だよという話
  • メッセージング
    Intent, Broadcastを通じて、アプリ内のクラスだけでなく、他アプリとのやりとりが可能だという話
    端末に表示するNotification

3日目

この回からようやくLollipop付近から導入されたAPIの説明も始めました。

  • AppBar(Toolbar)
    昔はActionBarと呼ばれていたけど、より柔軟に扱えるようになったよという話
  • RecyclerViewとViewPager
    昔はListViewを使っていたけど、より柔軟な表現ができるようになったよという話
    リストを扱う際のAdapterの話
  • 直列化とコレクション、永続化
    SharedPreferences、Internal Storage、External Storageなどデータの永続条件によって保存先が異なるよという話


Creating Lists and Cards | Android Developersから引用

4日目

この回で触れる内容については、昨今の開発ではライブラリを使うケースがほとんどですが、フレームワークが提供するAPIも知った上でライブラリを使ってもらうために敢えて触れるようにしました。

  • 非同期処理
    Service, AsyncTask, AsyncTaskLoader
    これから始める開発ではRxを使うケースがほとんどだが、AndroidのAPIにはAsyncTaskとかあってだな…という話
  • ネットワーク通信
    HttpURLConnection、ApacheHttpClient、Okhttp、Retrofit
    通信周りはもはやOkhttp一択なのではということで、Okhttp、加えてRetrofitの使い方を紹介した
  • データベース
    ここもORMライブラリを使うことがほとんどだが、一応知っておいてねということで泣きながらSQLiteを直書きしていった

この辺りの技術は僕もライブラリを使っていて実際に書いた経験はあまりなかったので、改めて勉強にはなりました。
でも、やっぱりライブラリなしでは辛いなと思いました。

4日目が講義としては最終回になるので、この回の課題はGithub APIを使ってリスト表示をするという、これまで講義でやってきた内容を盛り込んだ内容にしました。

開発合宿

研修の締め括りとして、iOSグループと一緒に東京近郊の温泉宿で2白3日の開発合宿を行いました。
この合宿で出した最終課題の内容は、

  • 検索APIからオブジェクトを取得
  • 結果をリスト上に表示
  • リストをタップしたら内容をWebViewで表示

の条件を最低限満たすアプリ作成で、時間に余裕がある人は追加で機能追加を行ってもらいました。

講義の中では、マテリアルデザインについては触れなかったにも関わらず自主的にマテリアルデザインのコンポーネントやインタラクションを取り入れる人もおり、デザインまでこだわる姿勢に関心させられました。

他にもKotlinで書く人や、概念がやや難しいRxやDaggerを導入する人など、講義でやった内容を大きく飛び越えてくる人がたくさんいて驚かされました。

DSC_3443
開発に集中
DSC_3448
豪華な夕食で一息
DSC_3559
優秀者の発表と総評

最後に

短い期間で講義で取り上げた内容も基礎の部分のみだったにも関わらず、合宿でのアウトプットは本当に質の高いものばかりで驚かされました。
進んで新しい言語やライブラリに挑戦する姿勢も素晴らしかったです。

また、今回講師として初めて人に体系立てて教えるという経験をしましたが、理解の甘い部分の整理だったり新たな発見もすることができ、非常に意義のある機会でした。

そして、最終合宿のようにみんなで短期間でものを作るハッカソンのような機会は単純に楽しいですね。
インプットしたものをアプトプットしてみんなでレベルを高めていくというやり方はこれからも続けていきたいと思います。

 

r21nomi
2012年度入社。コミュニティサービスのフロントエンド開発を経て、現在はAWAのAndroidアプリの開発を担当。