2024.10.21
お互い疑心暗鬼になりがちな、経営企画と事業部の壁 組織に「分断」が生まれる要因と打開策
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.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.21
40代〜50代の管理職が「部下を承認する」のに苦戦するわけ 職場での「傷つき」をこじらせた世代に必要なこと
2024.11.20
成果が目立つ「攻めのタイプ」ばかり採用しがちな職場 「優秀な人材」を求める人がスルーしているもの
2024.11.20
「元エースの管理職」が若手営業を育てる時に陥りがちな罠 順調なチーム・苦戦するチームの違いから見る、育成のポイント
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.19
がんばっているのに伸び悩む営業・成果を出す営業の違い 『無敗営業』著者が教える、つい陥りがちな「思い込み」の罠
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.15
好きなことで起業、赤字を膨らませても引くに引けない理由 倒産リスクが一気に高まる、起業でありがちな失敗
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.21
40代〜50代の管理職が「部下を承認する」のに苦戦するわけ 職場での「傷つき」をこじらせた世代に必要なこと
2024.11.20
成果が目立つ「攻めのタイプ」ばかり採用しがちな職場 「優秀な人材」を求める人がスルーしているもの
2024.11.20
「元エースの管理職」が若手営業を育てる時に陥りがちな罠 順調なチーム・苦戦するチームの違いから見る、育成のポイント
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.19
がんばっているのに伸び悩む営業・成果を出す営業の違い 『無敗営業』著者が教える、つい陥りがちな「思い込み」の罠
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.15
好きなことで起業、赤字を膨らませても引くに引けない理由 倒産リスクが一気に高まる、起業でありがちな失敗