2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
Android Studioのテンプレートを覗いてみよう(全1記事)
リンクをコピー
記事をブックマーク
kiuchi氏:お酒を飲んでいいって言われたので、プレモルを1本空けてほろ酔い状態で、「何話すんだっけ?」って、今すごく頭が真っ白の状態ですね。がんばって話していきたいと思います。
一応、Androidエンジニア兼、育児パパしてます。先日、娘が1歳になって、めっちゃかわいいです。いい反応ですね、そういうのを待ってました。
Twitterとかはこんな感じでちょいちょいやってます。さっき「ほろ酔いでどうしよう」っていうつぶやきをしました(笑)。
最近のアクティビティは、「DroidKaigi2018で発表してきました!」っていうことをちょっとがんばって強調してみました。
今まで発表した2人とも発表してたので、「あれ、これはあんまり目立たないぞ?」ということになって、「どうしよう」って、今ちょっとテンパってます。一応、YouTubeに上がってるので、見てくれたら僕の再生数が増えて、ちょっとハッピーな気分になります。
これで何をやってたかっていうと、今回のテーマである、テンプレートを作ってみました。「何のテンプレートなの?」というと、KotlinでCleanArchitectureの実装を簡単に作れるテンプレートです。これを使ったら、だいたい15分ぐらいかかっていた作業が1分以下ぐらいで終わるようになったので、「ヒャッホーウ!」って、うれしい感じになりました。
一応サポートしている主なライブラリとかですが、主要なところはだいたい個人的に使ってるので、抑えられてるかなぁと思います。
ちなみに、(スライドを指して)一番下に書いてあるDataBindingとViewModelは、今週でがんばって対応しました。まぁ、ずっと放置してただけなんですけどね。
ViewModelは今日プッシュしました。疲れました。Daggerのインジェクションが全然解決しなくて死にそうでしたね。みなさんに使っていただけたらいいなと、一応、(スライドの)一番下の隅っこですがURLを載せてます。
この発表をDroidKaigiでしたんですよ。そしたら、「テンプレートってどうやって作るの?」って、1つ疑問が出てきました。まぁ、その時は確かに話してなかったな、と思いました。じゃあ、やっぱりテンプレートをちょっとのぞいてみようということで、今回この場に立たせていただきました。
ただ、DroidKaigiを聞いていただけた方はいいかもしれないですが、テンプレートをのぞく前に「じゃあそもそも、テンプレートが作れると何がうれしいんだっけ?」というところから話していかないといけないと思います。
個人的に僕がテンプレートを作ってうれしかったことを、3つ挙げようと思います。まず、新しい画面とかを作る時のひな型を自分好みに作れます。今、Android Studioを使っていただいてる方がほとんどだと思うんですけど、テンプレートがあると思います。ただ、やっぱり自分好みじゃない時って多々ありますよね。
例えば、ログインのテンプレートがあるんですけど、「やっぱり作りたい画面とちょっと違うんだよね」とか。ベースアクティビティとかあるけど、「やっぱりちょっと違うよね」っていうことがある。それを自分たちの好みでカスタマイズできるというところがすごく強いと思います。
2つ目は、まさに今回のCleanArchitectureの場合もそうなんですけど、アーキテクチャとかを採用する際のひな型が作れることです。これを作るとどうなるかというと、例えばプロジェクト内で「オレオレ実装」を減らせる。「みんな、このテンプレートを使ってね」とテンプレートをインポートしていただいて、それをベースに作ってもらえると、個人のゆらぎっていうものが減るかなと思います。
あと、定型文で実装するっていうところを自動で作れます。よくあるのが、Daggerのモジュールのところや、コンポーネントのところの実装ですね。慣れてないとインジェクション周りで死ぬことになって、「なんで解決しないんだ!」ってなると思うんですけど、一発でも成功しちゃえば、それをテンプレートとして使い回せるので、楽ちんというところがあります。
3つ目は、アペンド的なものなんですけど、新規プロジェクトを作る時とかのDependencyです。「俺、何のライブラリ使ってたんだっけ?」という時に、さっきバーッと挙がってましたけど、これ全部をパッと書ける人って、けっこういないと思うんですね。
前に使ってたプロジェクトからコピペしてくるのが主だと思うんですけど、「最新のバージョンっていくつだっけ?」「今作ってるのって、なにを使ってるんだっけ?」という話になってくるんですよね。そういうところから解放されます。「いつも使ってるやつは、もうこれ一発でいけるぜ」っていうことができるんですね。ちょっと使いたくなってきてくれるとうれしいです。
では、改めてテンプレートっていうものの中身を見ていきたいと思います。その前に、「そもそもテンプレートってなんだ?」ということですが、これです。
おそらく見たことがあると思います。「New」って(メニューを)選択した時に、この「Activity」っていうところにある「Empty Activity」や「Basic Activity」とかが、いわゆるテンプレートと言われるものです。
「じゃあ、それはどこにあるんだ?」ということですが、MacとWindowsではちょっと場所が違います。だいたいそのプラグインのAndroidのlib/templates/activities以下にあります。みなさんたぶんMacの中にAndroid Studioが入ってると思いますので、手元のやつをピッピッピッと見てもらえるとわかります。フォルダがズラーッと並んでいます。
この下にあるのがテンプレートです。ここにファイルを置くことで、先ほどの画面のtemplatesというところにズラーッと出てくるようになります。
「ファイル構成はどんな感じ?」ということですが、ここではBasic Activityがあるので、それをちょっと参考に、ファイル構成というものを見ていこうかなと思います。
基本的には、だいたいこのディレクトリ構成がほとんどです。
黄色(の文字)にしているところが今回お話しするところです。他のところはだいたい共通なので、あんまり説明しなくてもいいかなと思ってます。
重要なのは、この(黄色い字にしている)「recipe.xml.ftl」「template.xml」、あとその他、rootフォルダの下にある、諸々のなんとか系、「なんとかこうとか.kt.ftl」っていうファイルたちです。これらが基本的に最低限のテンプレートを構成するために必要なファイルです。厳密にはもうちょっといるんですけど、基本的にはこの3つです。
わかりやすいところから順番に見ていきます。自分で作る場合は、template.xmlを一番最初に見たほうがいいと思います。
これは何かというと、みなさんテンプレートで作る時、この画面をよく見たことがあると思います。
左側に画像が書いてあって、右側にパラメータを入力するような画面です。ここのパラメータを設定するのがtemplate.xmlの役割です。
中身を見てもらえればわかるんですけど、id、name、type、constraints、suggest、defaultとか、だいたい読めばわかるようなパラメータがゴロゴロ書けます。
ここに書くことによって、すべてのテンプレートで使うパラメータを設定できます。例えば、(スライドを指して)ここで「MainActivity」と書いてますが、このMainActivityというStringは、この「Activity Class」というIDでアクセスすることによって、取ってこれるようになります。これを使うことによって、各自動で生成するアクティビティの名前を作ったりするわけですね。
ざっくりと話すと、(template.xmlは)テンプレート全体で使えるパラメータを設定します。パラメータとして、主にStringとBooleanとEnumが使えます。画像も設定できます。このパラメータを元にrecipe.xml.ftlというファイルを実行することになります。
では、「このrecipe.xml.ftlファイルって何?」というところです。これは「ftl」っていう拡張子で、FreeMakerという言語です。
すごくわかりづらくて、個人的にはよくわからないんですけど、元々がXMLなのでXMLにif文とかも追加できるみたいな、僕はそのくらいの認識です。たぶんもうちょっと詳しい人が話せば違うと思うんですけど。
このrecipe.xmlで何をしてるかというと、ファイルの作成やオープンとかをやっています。マージもやってます。フォルダの生成もやっています。(スライドを)見てもらえばわかるんですけど、一番上のinstantiateというところで、ファイルの生成ですね。fromとtoで、fromのところに元ベースとなるテンプレートで、toでここに吐き出すっていうことを指定しています。こういうものがズラッと並んでます。
あとはフォルダも作れます。「mkdir」(make directoryの略)と書けば、好きなフォルダを作れます。(スライドを指して)ここでは例えば、src/main/kotlinにKotlinのフォルダを作りたいっていうことを指定しています。
それと、AndroidManifestファイルとGradleのファイルに関してのみ、マージということができます。ただ、これは挙動がおかしい時が多々あるので、極力使わないほうがいいと思います。最低限ですね。一応、マージということができるので、例えば既存のAndroidManifestに対して、新しくアクティビティを作る際に、その定義をぶっ込むということがこれでできるようになります。
最後はDependencyですね。これはGradleに書かれるインプリメンテーションを書けるようになります。(スライドを指して)ここではDaggerで書いてますけれども、こういう感じで書いたりすることができます。だいたいここのルールにしたがってテンプレートを実際のプロジェクトにぶち込むということを制御しています。
ざっくりまとめると、(recipe.xml.ftlは)FreeMakerで書かれてます。
一応、URLはこれです。「FreeMaker」で検索してもらえれば出てくると思います。ファイルの生成、マージ、オープンを行えます。フォルダの生成もできます。Dependencyの設定もできます。だいたいここで制御します。
一番最後、「Activity.kt.ftl」です。これが最終的に出力したいアクティビティの中身です。ほとんどアクティビティそのままなんですけど、注目してほしいのは、「$」から始まる黄色(の文字)のところです。
template.xmlで指定したパラメータとかを、ここで参照できます。
黄色(文字)で書いてる「activityClass」というところで、さっき指定したパラメータのアクティビティ名をここで参照します。なので、これを出力すると、「class、main、activity、コロンなんとかこうとか」みたいなかたちで、ここで作成されるという流れです。
あと、ftlはFreeMakerの言語なので、if文とかも条件式で使えます。なので、例えば、「Retrofitを使う場合はRetrofitのインポートを書きたい」ということができたりします。
ということで、これらを使うことでファイルを使います。「Activity.kt.ftl」のルールとしては、だいたいroot以下にフォルダを作成して、ひな型のあるファイルたちを配置します。一応、ディレクトリ構成としては、たぶん基本的にはsrcの下にクラス系のファイル、resファイルにリソース系のファイル、root直下にはAndroidManifest系とbuild.gradleのファイルを配置するという、大まかなルールで配置してると思います。
これじゃないといけないというわけではないんですけど、他のテンプレートを見る限り、だいたいそんな感じになってるので、それに倣っておこうかなぐらいのノリです。
だいたい全体の流れはこんな感じですね。一応、まとめです。
テンプレートを自作できると何がうれしいかというと、複数のクラスを同時に作成したり、アーキテクチャに則ったクラス設計を一発で簡単にできたりということができます。
今回3つのファイルを説明しました。template.xmlに関しては、テンプレートに必要なパラメータというものを作れます。recipe.xml.ftlに関しては、ファイル、フォルダの作成のあれこれを制御します。root以下に関しては、細かなアクティビティとかのひな型を配置します、というお話でした。みなさん、やってみたくなりました? なりましたよね? なってください(笑)。はい、以上です。
詳しくはQiitaに記事を書いているので、(スライドを指して)QRコードをパシャって読み込んでください。
新しい試みとして、「Kyash」で投げ銭用のQRコードっていうものを作ってみました。パシャっとやってもらえれば、僕に送金できます。うれしいです(笑)。お金をもらえると僕はうれしいです。喜びます。はい、以上です。
(会場拍手)
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05