カテゴリー: Android

Summer Internship 2018 @ mercari

8/1-8/31の1ヶ月間、メルカリのサマーインターンに参加してきました。

動機

学部4年になり、卒論もあるので今年はインターンは参加しないかなと考えていました。しかし、実際にインターンの応募期間が始まって先輩たちが楽しそうにしているのを見て、気がついたらエントリーをポチッと…

その後、趣味で開発したAndroidアプリをフルスクラッチでリファクタリングしていた時期が重なり、「Android+ソフトウェアアーキテクチャを学びたいな」と考えていました。

mercanの記事にiOSのリファクタリングの話が出ていて、もしかしたらAndroid版も新しいアーキテクチャに沿った開発が行われているのでは!?と希望を抱き応募。

あと、一番大きいのが「自分の持っているAndroid知識を全部ぶつけたらどのくらいの成果が出せるか」気になって仕方がない。周りにAndroidエンジニアがいないので、自分の価値が分からないでいました。

選考

募集職種は13種と多く、その中でも自分は、”Software Engineer(Android)”に応募しました。

理由は、自分の中で「Androidが一番詳しく、アウトプットを出せる」かなと。

選考の流れとしては

レジュメ・履歴書提出→技術テスト→面接

でした。特に変わったこともなく、無事合格できました。

印象

一番印象に残っているのは「アウトプットを出す」を求められたこと。1ヶ月と短い期間でいかにアウトプットを出すかを常に考えていた気がします。

他の参加記でも言われていますが、「インターンだから~」といった制約が一切ないので自信を持ってvalueを出せる環境があると感じました。

余談で、オフィスが非常に過ごしやすいのと無限自販機が最高によかった。

内容

配属されたのは、メルカリJPのAndroidアプリのチームでした。

インターン用にタスクが用意されているのではなく、実際に業務を行っていく形です。「実際の開発業務」を行えるのは本当にいい。

具体的には、採用しているアーキテクチャに沿って設計し、実装に落としていく作業をずっと行っていました。ソフトウェアにおける設計だけでなく、「正しいリリースフローはどういったものか」「PRにはレビュワーに対してコンテキストを残す」などチーム開発で重要な多くの学びを得ました。また、Koltinについて新しい知見を得ることができました。一番印象に残っているのはKotlin Fest に参加したことで、非常に感謝しています。

動機としてあった「自分の持っているAndroid知識を全部ぶつけたらどのくらいの成果が出せるか」については、十分達成できたと考えています。Androidについての知識は十分あると思えるようになった一方で、コンテキストを十分残すといった課題も見つけることができました。ソフトウェア設計においては、設計書の作成やレビューを通して多くのインプットがあり、まさに「自分の価値を知る、高める」インターン内容でした。

感想

自分の好きなプラットフォームで業務ができるのは最高に楽しかった。一日中Android Studioを開いてるって最高じゃないですか!?気がつけば1日・1週間が終わってる感覚に陥っていました。

メンターランチやチームビルディングを通して他のエンジニアの方とお話をすることもでき、今後のキャリアを考えていくために非常に参考になりました。また、アウトプット出す1つの方法として「ブログを書くこと」も再確認できたかなと。

今後は、今回得たインプットを積極的にアウトプットしつつ今しかできない様々なことに挑戦していこうと考えています。

メルカリが入っている六本木森ビル

Kotlin Fest 2018 に参加してきた

個人のブログを書くのはかなり久々ですね。久々に技術的な記事になります!

8月25日にあったKotlin Fest 2018に参加してきました。

なぜ参加したか

昔から趣味でAndroidアプリサーバープラグインをKotlinで開発しているのでKotlinコミュニティに参加してみたいと思っていた。(地方学生はつらい)

Kotlin Fest 2018 には無料の学生枠が10人あったのですが、申し込み開始1時間後にはすでに埋まっていてチケットを取れずにいたところを、インターン先のメルカリさんに相談したところスポンサー枠でチケットを頂きました。ありがとうございます!

ちなみに、メルカリはKotlin Fest 2018の「ことりスポンサー」です。

オープニングセッション

非常に大きい会場だったのですが、私が開始時刻ギリギリに着いた時にはほとんどすべて埋まっていました。(スライドの色飛びがすごい)

  • Kotlinの歴史
    • 2011/07に発表
    • マイルストーン形式で小出しリリース
    • 2016/02にv1.0がリリース
    • coroutineはv1.1から登場
  • 日本Kotlinユーザーグループ
    • JKUG
    • 勉強会やSlackチャンネルを運用
  • 意外とサーバーサイドKotlinの導入事例は多い
  • Kotlinを知る
    • 「Kotlinを愛でる」は「Embracing Kotlin」の訳
    • Kotlinの哲学
      • 実用主義
      • 簡潔
      • 安全
      • 相互運用性
  • Kotlinの公式チュートリアル Kotlin Koans
  • Kotlin Guides
    • スタイルガイドの確認にお世話になるところ
  • KotlinのWebフレームワーク Ktor

感想

Kotlinの歴史は、最近Androidプラットフォームの公式言語になった程度だったのですが、v1.0は2016年だという驚きがありました。

Kotlin KoansやGuidesなど、Kotlin入門向けの内容だと思いました。また、Kotlinコミュニティの雰囲気もなんとなく感じれた気がします!

 

Kotlin で改善する Android アプリの品質


KotlinはJVM言語なのでJavaとよく比較されるが、なんとなくKotlinの方がいいと言ってるけど具体的にこういう点が優れているよねというお話

  • Androidアプリ品質とは
    • 速い
    • 落ちない
    • 使いやすい
  • 品質とは何か
    • 外的品質要因
      • スピード、使いやすさなどユーザーが認識できるもの
    • 内的品質要因
      • モジュール性、読みやすさなど、外的品質要因以外
  • Effective Javaの多くの項目が言語仕様で対応している
  • Kotlinを使用することで「明瞭で、正しく、再利用可能で、強固で柔軟性があり、保守可能なプログラムを書く」エッセンスが自然と取り入れられる

感想

具体的にKotlinがどういった点でJavaより優れているか知ることができたのがよかったです。スライドを見てもらうと分かると思うのですが、Effective Javaの項目を一つ一つ丁寧に解説されていたのも勉強になりました。

Kotlinアプリのリファクタリングポイント

  • Gradle Kotlin DSL
    • Groovyよく分からない。Kotlinで書きたい。
    • 知っている言語で書くことによってメンテナンス性が向上する
  • 重複した処理
    • 拡張関数が便利 <= わかる
      • 公式が使いそうな命名はしない
    • 乱用には注意
  • Collection
    • Listはimutableとは言い切れない
    • 2つのリストを同時に使い場合は .zip
    • 変換 .mapNotNull
    • N個づつに分割 .withIndex, groupBy
    • 否定はほとんど書き換え可能
  • スコープ関数
    • 処理をまとめることができる
    • ローカル変数が優先されるので注意
    • let/elvis は if/else と等価ではない
  • data class
    • ありえない状態を考慮したくない
      • sealed class, Either, Pair

感想

Kotlinのリファクタポイント、様々な気付きがありました。今まで、Listはイミュータブルだと思ってた。。(基本的にはそう)

data class も、簡単なモデルだと非常に便利ですが、巨大なモデルになると注意が必要になってきますね。全体的に、すぐ使える知見が詰まっていたと思います。

Kotlin linter

  • Linterの使い方や特徴
  • Linterの小スタムルールを作る
  • Linterとは怪しいとこにフラグを立てるプログラム
  • ktlint
    • gradle plugin(ktlint-gradle, kotlinter-gradle)
  • detekt
    • 高機能
    • configファイルで個々にルールの有効を変更可
    • visitは複数のメソッドがある
    • カスタムルールでフォーマットできる
  • android-lint
    • xml, java, kotlin をカバー
    • カスタムルールは googlesamples

感想

はじめて lint の世界を覗いた気がします。IDEなどでいつもオレンジ文字を出してくれるやつはこうやって解析して動いているんだなと知ることができました。

Kotlin コルーチンを理解しよう

  • サブルーチン: 親子
  • コルーチン: お互い対等
  • 一時停止可能な計算インスタンス
  • スレッドに似ているが特定のスレッドに束縛されない
  • 継続状況を容易にかける
  • 継続条件が増えても .await() なのでネストが深くならない
  • どうやって実現してるの?
    • Kotlinで動くならJavaで動くはず
    • コルーチンをステートマシーンにする
    • 中断と再開を状態遷移と見立てる
    • suspend修飾子: コンパイル時に自動的に継続オブジェクト引数が増える
    • suspendにはいくつか拡張関数がある
    • コルーチンビルダー: launch, asyncとか
    • 実行スレッドをコントロールできる
    • launch関数
    • 結果を持たない
    • 開始の開始も変えれる
    • 親jobを渡すことで一斉にcancelとかもできる
    • async 値を返す
    • 例外はlaunchの中でcatchする
    • await(), await() で並列化
    • リトライ: repeat(3) { return@repeat }
  • android-coroutines
    • onActivityResult, PermissionRequest とかあるよ

感想

Kotlin coroutines はよく使っているのですが、イメージとして「謎技術でいい感じにしてくれるやつ」としか思っていなかった。KotlinはJVM言語だからJavaでも書けるよね というアプローチはとてもわかり易かった!Kotlin coroutines は「ステートマシーンの考え方で状態遷移させてるんだよ」って言えるようになりました。

ピンポイントな技術的な話で非常に面白かった。

How to Kontribute (v4 JP)

スライド

こちらはコントリビュートの具体的な手順の説明だったので要約を見るよりスライド↑を見たほうが分かりやすいと思います。(なので要約はナイデス)

感想

発表のプロだと思わせるようなプレゼンでした。(どうすればあんなスムーズに進めれるんだ…)個人的には、初心者から始めやすいチケットが紹介されていたのが知見としてありました。JDKのバージョン4つもいるんですね…

まとめ

こういった技術カンファレンスに参加するのは初めてだったのでとても勉強になりました!特に、コルーチンの話は本当によかった。趣味やインターンでKotlin好きと言えるレベルで書いてはいるのですが、まだまだ知らないことも多いのだと感じることができました。

積極的にKotlinコミュニティに関わっていきたいですね!

Androidゲーム「Super Cube World」をリリースしました

春休みでゲームを開発しリリースするという目標を立てていたのでそれがようやく達成できました。

Super Cube Worldをダウンロード

Androidで動作するUnityエンジンを使用したアーケードゲームです。

SS1

 

前作の「Super Cube 3D」では技術不足のため実現できなかった様々な要素を実装しました。

たとえば、回転する敵や

SS2

 

どこかで見たことがある上から落ちてくる敵。

SS3

 

その他に、一番のお気に入りのジャンプブロックetc…

SS4

 

プログラムを軽量化し、リアルタイムシャドウを動かしたまま旧端末で60FPSを出すことに成功しました。(前作では重すぎてリアルタイムシャドウを断念)

また、アプリサイズも90MBオーバーから27MB(ver1.0.0)を達成。スマホにやさしいアプリになりました。

フィードバックやレビュー等、よろしくお願いします。

SuperCube3 α版を公開

現在開発中のAndroidゲームアプリ「SuperCube3(仮称)」、α版を公開しました。

α版ですので、主にバグ修正を目的としています。バグを見つけた方は@ken_kentanにまでお願いします。

http://ken.kentan.jp/apk/SuperCube3_dev_alpha.apk

操作方法:

移動 ジャイロ

ジャンプ タップ

一時停止 バックキー

※α版に含まれるデータはすべて開発段階のものです。

Androidアプリ、1からの開発

久々に1からアプリを開発することになりました。

というのも、Playストアに登録していたアプリがGoogle様のコンテンツ ポリシーに違反していたようで先月配信停止に:3

という経緯です。。

自分が開発を始めてから数年経つのですがその間にAndroidにおいての開発の順序がかなり変わっていました。というか、Gradleってなに!!

現在、アプリはkiecサーバーから配信しているのですがユーザー的にあまりよろしくないので1から開発することに。

見たことがないAPIと格闘の末、メインのUIのみ一応完成させました。2013-12-31 12.37.33後はFont-familyを変更してstringに渡すだけなのですが、なんとassetsディレクトリがない!

調べた結果デフォルトでは使えない様なのでbuild.gradleを書き換えてあげて使えるように。2013-12-31 13.27.56と、勉強合宿やら宿題やらでここまでくるのに1ヶ月。。。

この先どうなることやら(´・ω・`)