一年の振り返り
この記事はICT Advent Calenderの21日目の記事です。
こんにちは、mitoです。
最近、Android関係で詰まったことなどばかりを記事にしていたのでどういう風に書けば良いか悩んでいます。
ICT Advent Calenderのまとめ記事
前日の記事
hundo.hatenablog.com
前日は1年生のふんど君による記事でした。
1年生の頃から大会に参加していてすごいなという感想を抱いています。
「何が何でも何か一つは作る」
是非頑張って一つと言わずたくさん作って欲しいです。応援しています。
全力で絡みに来るらしいので全力で待っていますね。
はじめに
当初の予定では、アプリをリリースした話と振り返りをしようとしていたのですが ゲームにはまっていたせいで 諸々あって出来てないです。
関わった人に許諾を取っておたすけじゅーるを公開しようとしています。
まあ今回はアプリをリリースしてないのでただ振り返ってみようと思います。
※書き始める時はさっと終われるくらい短くしようとしていたんですが、今年あったことを書いていったら4000字近くにもなっていたので、興味ない方や忙しい方は最後らへんの「この一年」くらいを読むといいかもしれないです。
チーム決め〜プロコン結果発表まで
チーム(リーダー)決め
今年の初めごろにプロコンに参加するということでチーム「ましゅまろココア」が結成されます。
メンバーとしては、mito、りんぱんまん、えびな、えのき、cmyUEの5人です。
このチームでmitoはリーダーを務めていたのですが、結成される前はリーダーはしたくないと思っていました。
今年のチームのメンバー決めの前にリーダーやったことある人出来そうな人が集まって誰がリーダーするのかみたいな集まりがありました。
その時、割と人数がいたので「あ、これは自分はやらない感じになりそう」って思っていたのですが、気付いたらリーダーになっていました。
リーダーの役割が嫌いというよりはリーダーに自分は向いていなくて(優柔不断なので)、それよりも補佐的な感じでリーダーの人に「あれ、終わったの?、〇〇忘れてない?」みたいな感じでいう役割の方が向いていてそっちの方がやりやすいと感じているからです。
チームが結成されてからは、嫌々リーダーをやっていたわけではなく、「リーダーになったからにはちゃんとやってメンバーと一緒に本戦に行くぞ」とい気持ちで臨んでいたので心配しないでください。
アイディア出し・企画書作成
優柔不断なのと甘いというのもあってなかなかメンバーを集めてアイディア出しを行うことができませんでした。
結局、企画書にできそうなアイディアを出せたのは提出期限1週間前くらいで、企画書を1週間で作り上げないといけなくなりました。
なんとか提出日に遅くまで学校に残ってきしもんに手伝ってもらいながらりんぱんまんと完成させて提出することができました。(他のメンバーは寮生なので早めに帰ってもらいました)
結果は予選敗退でした。理由としてはギリギリにしかアイディアを出すことができていなかったのでそのアイディアが実現可能か実用性があるか調査・検討が出来ていない上に企画書に時間を当てられなかったのが大きかったと思います。
その後
プロコンの結果が出た後、チームのメンバーでもう一度集まってこれからどうするかという話をして、またこのチームで別の大会に出ようということで話が決まりました。
ですが、またメンバーを集めることができず結局流れてしまい、mitoが抜けました。
うまく回せなかったりメンバーを集めれなかったり途中で抜けてしまったりでメンバーには大変申し訳ない気持ちです。
プロコン後
プロコンに落ちチームからも抜けたmitoは大会に出ない人となりました。暇人ですね。
去年一昨年とパソコン甲子園からビジコンまで参加し1年中何かに参加しているということが続いたので、何の大会にも参加しないという日々が久しぶりで久しぶりでした。
久しぶりにこういった時間が確保できて、気持ちに余裕を持っていろんなことをできました。
Android Jetpackに関して調べたりゲームしたりエトセトラ...
PS4を買ったのでまたゲームにハマってしまいました...(現在進行形)
また、この時間を使って夏休みには3社にインターンシップに行きました。
インターンシップでは、いろんな知見が生えまくってとても良い経験となりました。本当にありがとうございました。
インターンシップに関してはいつかの高専だよりに掲載される予定なのでそこを見てください。(まだ書いていない)
Hack U
プロコン後、えびなとポテトとヤフー主催のHack Uに参加することとなりました。
こちらもなかなかメンバー全員で集まらず大会数日前にSkypeでアイディアが決まり、開発・プレゼン作成が始まるという超ハードスケジュールとなってしまいました。
また、その開発期間にmitoはインターンシップに来ており大会当日も参加しないという形になってしまい、大変申し訳なく思っています。(作品の様子等はインターンシップ先のHack U担当の方から聞きました)
パソコン甲子園
去年・一昨年と参加し両年でベストデザイン賞に終わったパソコン甲子園。
もちろん、ベストデザイン賞も嬉しいんですが、グランプリ狙えると思っていたので残念だった大会です。
今年からは年齢の関係で参加出来ていないのですが、去年同じチームだった破壊神ことびーまかがいるチームがグランプリを取って、更に「先輩たちのリベンジができた」って言ってくれて最高に嬉しかったです。
しゅうがくりょーこん再来
去年の初めくらいから13thにAndroidアプリ開発を教えるというところから始まったしゅうがくりょーこん作成計画。
去年、mitoとnemu_souが教える立場になってAndroidアプリやサーバーサイドについて教えながら13thの5,6人くらいにしゅうがくりょーこんを作成してもらい、mitoが統合・調整して完成。
実際に去年の自分たちの研修旅行で使うことができました。
そして、今年の研修旅行でも使うみたいな話が出てきて自分は最初、去年のやつで重要なバグを直せば使えるなと思っていました。
しかし、デザイン等も一新して1から作り直すことになりました。
mosmos_syrcさんの勉強ということで1から作り直すことになりました。
そこまでは、「あ、やるんだ。頑張ってほしい」くらいにしか思っていませんでしたが、諸々あって研修旅行1ヶ月前くらいになっても作り始めていないという事態になってしまっていたので、急遽しゅうがくりょーこん作成にjoinすることが決まりました。😇(もともと教える予定ではありました)
joinした瞬間、もはやその前から炎上が確定しているプロジェクトはなかなか面白かったですよ。
なんやかんやあってなんとか当日までに去年より良い点呼を取ることができました。
他2人がAndroidアプリ開発初心者だったので教えながらなということと自分もあまり進捗を出すことが出来ずにギリギリまでコードを書いていました。
でも、去年よりバグ少なくできたしAndroid Jetpackの内容使えたし、設計についても考えられたし知見が生えまくったのでとても良かったです。(ギリギリまでやっていたのが良いわけではない)
Android講座
mitoが自分の知りうる情報を後輩に教えてAndroidアプリ開発について話ができる人が欲しいということから始まった講座です。
Twitterで軽く呟くと想定していた人数よりかなり多い人が反応してくれて嬉しかったです。
今の所、まだ一回しかできていませんがこの記事が公開される予定の今日に第二回、年明けた2019年には週一から2週に一度くらいのペースで行って行こうと思うのでお待ちを...!
この一年
この一年は本当に長く感じています。プロコンの企画書を書いていたのは遠い昔のような感覚。
この記事を書いていて「この出来事があったのは去年じゃなく今年だった...」みたいなのが多かったです。(初めてインターンシップ行ったのも今年だし...)
今年度から寮外生になり、3年生までのびっちり入った時間割と比べ物にならないくらいスカスカな時間割、大会に参加しない後期と色々と環境に変化があった年でした。
ただ、その空いた時間を今まであまりできなかったことに当てたり自分について考えたりする時間が多く確保できました。
ゲームにまたのめり込むこともできました。
今年はチームに対して大変申し訳ないことをしたのが多かったです。
来年、チームを組んで大会に参加するということになれば今年のようなことは起こさないようにしたいです。
最後に
最近、ゲームにハマってしまいICTに行く機会が減ってきているんですが年明けたらもっと多くの頻度で行きます、きっと。
長々と駄文になってしまいましたが、ここまで読んでくださった方には感謝の言葉しかないです。
明日は、去年卒業したコーヤ・ロードアゲイン先輩と同級生のがちゃみんです。
コーヤ先輩を知らない後輩達のために説明すると技術強強な面白い先輩です。
がちゃみんはきっと良い記事を書いてくれる。
コーヤ先輩:
がちゃみん:
mito.
"Plugin with id 'androidx.navigation.safeargs' not found."と怒られた
背景
タイトルのままで、Android JetpackのNavigationで遷移先のFragmentに値を渡したくなって、safe-argsを使ってみようと試そうとし、公式のページとか見ながら追加しようとしたら怒られた。
他のサイトとかも同じように書いてあったりしたので大丈夫かと思ったらそんなことはなかった...。
起きた問題
この部分を参考に、app/build.gradle
にapply plugin: 'androidx.navigation.safeargs'
を追加しました。
そしてsyncさせると Plugin with id 'androidx.navigation.safeargs' not found.
と言われてしまい :thinking_face:🤔
見ていたページの前後を見てみても特にそれ以外に追加すべきなものを書かれていませんでした。
解決法
ググって、stackoverflowでこのページを見つけました。
この回答を見ると、"そのクラスパスじゃなくてこっちのクラスパスで試してみて"みたいなこと書いてあり、「クラスパス...?何か追加したっけ....」と思い、質問の方も確認して見ると...
なんということでしょうapp/build.gradle
のdedependencies
にclasspathが追加されているではありませんか(某番組風)
ということでこの質問と回答を参考にapp/bundle.gradle
に以下を追加しました。
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha05"
そして、syncすると通りました。
まとめ
公式だけしか見ないのは罠
pluginとして使うからclasspathが必要なのは当たり前なんて言われてしまうとごめんなさいとしか言えなくなります...
直接は関係ないけど、gradleについてまだよくわかっていないので、"build.gradleにこれを追加して"と言われてもどれ...というお気持ちになってしまいませんか。なりませんか。
スコープのitでつまづいた
そのまま
失敗したコード
private fun setupView() { binding?.let { it.setOnClick { Toast.makeText(context, it.title.text.toString(), Toast.LENGTH_SHORT).show() } }
何がしたかったのか
?.letでbindingがnullじゃないことを保証した上で(binding?.hogeって書かなくて良いように)、スコープ関数を使ってクリックリスナーを設定、かつそのクリックリスナー内でView内のwidgetにアクセスして値を取得したかった
何がいけなかったのか
setOnClickの内外でitが指しているものが違う setOnClick外では、NonNullなbinding setOnClick内では、OnClickのリスナー
解決策
private fun setupView() { binding?.let { it.setOnClick { _ -> Toast.makeText(context, it.title.text.toString(), Toast.LENGTH_SHORT).show() } }
とかとか
まとめ
itは便利だけど何を指しているのかちゃんと考えて使おうな
こんなことで躓くのは自分しかいなさそう
mito.
ViewModelProvidersが使いたかっただけ
背景
既存プロジェクトにMVVMを導入しようとしてViewModelProvidersを使おうとした。
起こった問題
ViewModelProvidersを使うためにプロジェクトに
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'
を追加し、Gradle Syncすると"Failed to resolve: fragment"と言われ失敗する。
解決方法
build.gradle内のrepositoriesの中にあるjcenter()とgoogle()の順番を入れ替える。
before
repositories { jcenter() google() }
after
repositories { google() jcenter() }
mito.
Android-KTXを使っているプロジェクトでAndroidX RefactorしてGradle Syncした時に見つからないと言われた時
背景
もともとAndroid-KTXを使っていたTwitterクライアントアプリケーションのプロジェクトをGoogle I/Oの発表が終わった時に AndroidX Refactorをしてみた
起こったこと
AndroidX RefactorをおこなうとJavaやKotlinのコードが書き換えられるだけでなくbuild.gradleのimplementationのリンク(?)も書き換わります。
書き換わった後にGradle Syncした際に、「android-ktxのcoreが見つからない」みたいなこと言われて失敗しました。
解決方法
AndroidX Refactorした際に、書き換えられた
implementation 'androidx.core:core-ktx:0.3'
を
implementation 'androidx.core:core-ktx:1.0.0-alpha3'
に修正します。
AndroidXが出る前にKTXを使っているプロジェクトでAndroidX Refactorすると、"androidx.core:core-ktx:0.3"みたいになるけどこのままでGradle Syncすると「見つからない」って言われるからちゃんと
— mito (@mitohato14) June 15, 2018
"androidx.core:core-ktx:1.0.0-alpha3"にしないといけない
mito.
チームラボ通年インターンシップ参加記
こんにちは、お久しぶりです。 1月ほど経ってしまいましたが、春季休暇中に参加させてもらったインターンシップについての記事を書きたいと思います。(だいぶ遅い)
2月27日から3月14日までの約2週間、チームラボさんにインターンシップでお世話になりました。
本当にありがとうございました。
行った内容
実際の業務のチームで行われているAndroidアプリ開発に参加させてもらいました。
インターンシップでは会社によって、全く業務に関係ないことだったり、1人だけで進めていく作業もあったりと聞いていて少し不安でしたが、自分がお願いしたように実際の業務のチーム開発に参加できてとても良かったです。
インターンシップ初日時点では、要件定義が終わって開発が始まったばかりでした。ですので本当に開発の初期段階から関わらせていただくことができました。
開発した画面
- アプリ初回起動時のチュートリアルが終了した際に出てくる画面
- ある桁数の決まった2つの数値をユーザーに入力してもらいその2つの値が正しいか調べ、正しいならアプリ内に保存する画面
一つ目の画面はプロジェクトでの開発に慣れてもらうみたいな感じで画面も処理自体もシンプルでした。ですが最初の1週間のほとんどをここで消費した気がします。
二つ目の画面は2つの値が入力されるまで確認用のボタンを非活性化させておく必要があったため一つ目に比べ複雑でした。ですが、後半ではだんだんと慣れてきたのかなんとかインターンシップ期間中にひとまず終わらせることができました。
初めて触ったインターンシップで触った技術やライブラリ、考え方
- DataBinding
- ConstraintLayout
- Redux
- Dependency Injection
- RxShared
- DataBindingのCustom Setter
どれも名前聞いたことある気がするけど実際に触ったことはないことばかりだったのでとても刺激的でした。
インターンシップで学んだこと
もちろん先ほど挙げた始めた触った技術も学べたのですが、それ以外にもチームのミーティングに参加させてもらい、どういう風にプロジェクトを進めていくのかとかモバイルチーム以外とのコミュニケーションとかも実際に見て学びました。
他にもコードレビューのありがたさや、文言をまとめた文書や画面デザインなどを管理したりコメントしたりするIDE以外でのツールの存在やその使い方などなど本当に多くのことを学ばさせてもらいました。
開発以外のこと
用意していただいた宿泊先が場所的にも設備的にも広さ的にもとても良かったです。
平日の昼にはメンターさんが他のプロジェクトの人などを数人呼んで一緒にご飯に連れて行ってもらったので自分がいるプロジェクト以外の人とも関わることができました。
連れて行ってもらったご飯屋さんも美味しいところばかりでした。
出勤時間が10:00だったので朝余裕をもって準備して出社することができました。
学校の登校時間もそれくらいにして欲しいくらい...()
土日が休みだったので遊びに行ったり東京で行われているイベントに参加したりもできました。
席の両隣の2人には特に世話になりました。
最後に
インターンシップ期間中は本当に多くの人におせわになりました。
ありがとうございました。
とても貴重な体験ばかりで本当に良い経験になりました。
チームラボさん以外の企業にもインターンシップなどで行ってより多くのことを経験したいです。
Bonfire Android #3参加録
こんにちは、mitoです。
1週間くらい経ってしまいましたが、「Bonfire Android #3」のブログ枠用ブログです。
Bonfire Androidとは
自分も今回が初参加で、詳しいことはまだよくわかっていないのですが 毎回あるテーマに沿って、Androidに関する15分くらいの発表が行われるイベントで 主催はYahoo Japanです。
今回のテーマは「サービスと設計」でした。
参加への経緯
Bonfireは、Yahoo Japan主催なのでももちろん会場はヤフー株式会社で、沖縄住みの自分は普段なら参加できないイベントだったのですが、今回某社のインターンシップに参加している期間中に開催されるということを知ったので即参加登録しました。
人数が多かったので空いていたブログ枠で確実に行けるようにしました。
Androidアプリの設計について
自分自身は、ちょうど参加していたインターンで初めて設計に触れ始めたくらいには 設計について初心者状態でした。
ずっと、「動いているから問題はないんだろうな〜」「一人で書いててどこらへんに何が書いてあるかわかるからいいか〜」みたいな感じで書いていましたが、今回のBonfireやインターンシップで設計について知り、どのような影響があるのかわかってきたので既存のプロジェクトや新規プロジェクトに導入できるとこからしていきたいです。
Bonfire Android #3の内容
スケジュールは
- Androidアプリにおけるソフトウェア設計の考え方
- 課題感から始めるクラス設計とチーム内での合意形成
- 4年の開発が積み重なったアプリへのリファクタリング手法
- 設計にみるAWA Androidアプリのこれまでとこれから
- Yahoo! JAPANアプリのLayered Architectureについて
でした。 見つけることができた公開されている資料はリンクを貼っています。
発表の詳細は「#yjbonfire」のタグをTwitterで見ながら、公開されている資料を読んでくれ頼む、って感じで省かせてもらいます。(まとめられる自信がない)
感想
発表
設計についてほとんど知らない状態で今回のBonfireに参加したため発表された内容を全部理解できたわけではありませんが、なるほどと納得できるものやこんなのもあるのかなどが多くあって、とてもためになりました。
何人かの人の発表にもあったのですが、既存プロジェクトに設計を導入する際は、そのプロジェクトで起こっている問題やメンバーの構成、学習コストをきちんと判断し適した設計を考えることが大事、ということでやはり設計に関しても「銀の弾丸などない」ということがわかりました。
適した設計を考えることも大事ですが、どの設計を用いるなどをチーム全体で共有することも大事ということも。
感じたこととしてはやっぱり、今まで設計を考えたことのない人に対して導入すると言ってもそれを導入するメリットを理解してもらうのは難しいだろうなということです。
とりあえず導入しても、効果について疑心暗鬼状態では開発スピードは落ちていく一方になりそうです。
そこらへんも学習コストとして考慮しないといけなさそうではあります。
イベントに申し込んだ段階では、「サービスと設計...?、なにそれ...、自分がやったことのない分野だから発表を聞いても内容も利点もわからなそう...ブログどうしよ...」みたいな状態でしたが発表では、こんな問題があってこういう状況だからこの設計パターンを導入してみたみたいな感じでなぜそれを選択したのかがしっかり話されていて、とても理解しやすい発表でした。
もしこのBonfireでの発表を聞いていなかったらまた設計に触れ流のがどんどん先延ばしになってしまっていたと思うので参加して、登壇者や同じ参加者の話を聞けてとてもよかったです。
懇親会
発表終了後にそのままの会場で懇親会が行われ寿司が出てきたのですが、会話に夢中になりすぎて結局寿司を一貫も食べれないまま容器は空に...
しかし、スタートアップした人や他高専生、Yahoo Japanの社員の方などなど多くの人と話せてとても楽しかったです。
今までイベントや大会の懇親会では、開発が終わっていないために早めに抜けたり参加していてもあまり他の人と話さなかったりしたのがとてももったいなく感じました(今更)
来年度以降のPCK組は早くに開発を終わらせて、コンテストの懇親会にきちんとでて他校の人と話をして欲しいです。
少し、短いですがここで終わりとさせていただきます。
また機会があればBonfireに参加したいです。
mito.