Calendar14日目の記事です。前日はnemu_souでした。何か作ったらしいのでえらいですね()。nemu-sou.hatenablog.comこんにちは、mitoです。みなさん、DIしてますか。ことDIとは、コンピュータプログラムのデザインパターンの一つで、オブジェクトなどの間に生じる依存関係をオブジェクト内のコードに直接記述せず、外部から何らかの形で与えるようにする手法。(IT用語辞典)「依存性の注入」とよく言われています。依存性とはここでいう依存性というのはあるクラス内で他のクラスを利用している状況のことです。Aというクラス内でBクラスを利用しているということがあったとします。}}こういう状況でAというクラスの動きにはBというクラスが必要になって、Bクラスがなかった場合にAクラスは機能しません。これが依存で「AがBに依存している」と言われてます。usedとあり、訳すと「"Dependency"は使用できるオブジェクトです」そう、オブジェクトです。オブジェクト指向でのオブジェクトと捉えて問題ないと思います。考えると考えやすくなるかと。注入とは注ぎ入れること。(Google検索結果)つまりあるクラスに対してそのクラス内で使っている他のクラス(オブジェクト)を外部から注入・渡してあげるという感じです。↑の例ではAクラスの中でBクラスをインスタンス化(生成)させて使っているので、外部から注入されていません。これに対して、外部(他クラスなど)から入れて・渡してあげることです。外部って誰?っていう気持ちになるかもしれませんが、今のところはあまり気にしなくてもいいです。(一応書いておくと、Aを使おうとしている他クラスだったりDIコンテナだったりです。)DIの種類DIというのは上記の説明のようにパターンの名前でしかないので、それを実現するためにはいくつか種類があります。Injectionコンストラクタ(Constructor)で渡してあげる方法です。Injectionセッター(Setter)で渡してあげる方法です。Bクラスは上記のコードと同じDIコンテナを使うDIコンテナと呼ばれるDIを実現してくれるライブラリのようなものです。DIコンテナには多く種類がありそれぞれ使い方も全然違うのでここでは説明しないです。柔軟になるただ、これを聞いただけではへ〜そうなんだになると思います。(自分も前まで利点は知っていたけどそうなんだくらいにしか思ってなかった)テストがしやすくなるBをモック化してAのテストがしやすくなります。モックに関しての話はテストの話になってくるので省略するのですが、AクラスがBクラス内のgreeting関数をちゃんと実行できているかなどを試すことができます。柔軟になる今、Bクラスをインスタンス化するには、B()だけで済んでいますが、もしBクラスのインスタンス化に仕様変更が入ってめちゃくちゃ長かったり複雑だったりした場合(良い例が思いつかなかった)に、Bクラスをインスタンス化して使っているクラス(例ではAクラス)全てのインスタンス化部分を書き直さないといけなくなります。他にもいろいろな利点や欠点があるのですが、そこは調べてください。最後に今年度で高専も卒業ということで、それに関する記事はまた2,3月くらいにでも書こうと思います。卒論を書き終わった頃には技術に関する記事をまた書いていこうかなとも思っているので、卒研頑張ります。翌日は、ねるねるです。サーバーサイドに強いっていう印象だったけど、プロコンの時にAndroidの話をしていた気がするなって思っています。22:22DIの話Tweet広告を非表示にするもっと読むコメントを書く2019-11-15プロコン本戦参加前はじめに私たち、マンゴーごはんは#procon30にGooTravelという、オフライン環境下でのインバウンド客のサポートをするスマートフォンアプリで自由部門にて参加しました。4月前チームが決まりました。自分がチーム決め前の面談時に出したリーダーはやりたくないという希望を考慮していただき、リーダーではなかったです。ぴおか(1年)(後に合流)でした。1年生のたぴおかは入学後に加入することになります。この頃は、去年予選落ちしたmitoとりんぱんまんがいるけど大丈夫かな〜、でもウエハラは結構喋るしキャサリンも去年結構喋るチームにいたしなんとかなるかな〜くらいに考えていたと思います。ちなみに、チームリーダーはウエハラでした。2年生でチームリーダーの経験がない状態で、学年もバラバラなチームのリーダーをうまく勤めてくれました。:crap:さすが委員長ちなみに、チーム名のマンゴーごはんに関してなんですが、これはキャサリンが好きと言っていたタイの料理らしいです。調べたところ、味付けしたもち米にマンゴーをそのまま乗っけて提供する屋台とかで出るような食べ物らしいです。一度、メンバーみんなで食べてみたいんですが、日本で食べれる場所ってあるのかな???(作るしかない??)始まったアイディア出し出ないですね...いろいろなアイディア出し方法を試してみたんですが、プロコン向けなアイディアは全然なかったです。その中でもいまだにずっと印象に残っているアイディアがあって、アイディア出しの序盤くらいで出た、「粘着テープのようなものでサッカーボールを作って、それを子供に遊んでもらってゴミ回収をする」というものです。このアイディア、IT要素もなく粘着テープなボールをどうやって蹴るんだ...って感じですよね、楽しそうだけど。沈黙のアイディア出しこれは他の人の記事にも書かれるであろうことなんですが、本当にアイディア出し中喋る人があまりいなくて、mitoが無理やり喋ろう・しゃべらなきゃって考えていました。(結局あまりしゃべれていない)正直、mitoは自分が積極的に喋るというより喋っている人たちの話を整理することの方が性に合っていると思っているので大変でした。(去年含む)そこから出ないまま時が流れ、企画書提出締め切り約1週間前くらいになっていたと思います。ありません!仕事を結構分担して作業していたのですが、それぞれの進捗は良くなく本当に終わるんか...?って感じでした。今見てみると、提出期限2日前の水曜日時点で、企画書全体の構成が確定していない・システム名決まってない・ロゴ完成していない・背景とニーズやばい・もう確定して色変更するだけな状態が開発計画とアルゴリズムの2枚(12枚中)・システム構成の矢印やばい・etc...今だから言えることで、この時期に自分のタスクにそこまで余裕があったわけではないのですが、mitoが全部やってしまわないといけない・終わらないのではと一人で考えて悶々としていました。結果的にはmitoがほとんど書いてしまうということもなく完成しました。結局今年度も自分たちのチームが一番遅くまで作業していて20時くらいに学校から帰り、最終版を提出したのは23時とかだったと思います。19時くらいには一通り終わって、チームメンバー全員で通しで流れを見た記憶があるので、去年よりはマシだったかなと思います。!笑くらいの気持ちでした。はい、去年もそう思っていた節はあるのであてにならないうえに若干嘘ですね。確かに通るんじゃないかと思ってはいたけど、それ以上に落ちるとも思っていました。それは自分たちのチームだけでなく、うみまもると競技以外は落ちるとまで思っていました。GooTravelとunihomeはそれぞれ部門が違う感じが提出前からしていたので、それで落とされるのではないかと思ってました。受かるとも落ちるとも思っていたので、結果発表の時はソワソワしてて結果を見て、自由部門に沖縄の文字が見えてめっちゃ嬉しかったし、課題部門見ても2チームとも通っててさらに嬉しかったです。それから少し経ってPCKの結果を見て、全チーム通過が決定しそれも嬉しかったです。開発期間mitoの考え企画書を書いている時点、なんならアイディア出しの時点でmitoは、「今年の開発はガチガチに設計など組んでガチ開発をしてやろう」と考えていました、そう考えていたんです。他のメンバーには実際に開発をしてもらおうとしていた機能に似た機能を持つアプリの勉強を兼ねて開発をお願いしておき、自分はその間にどう設計を組んだら良いかどういう開発方針がいいかをいろいろ考え、GitHubのREADMEにひたすら書いていました。設計や開発方針を色々と考えていたのは、チームメンバーがAndroidに限らずチーム開発をあまりしたことがなかったため、つまづいてしまわないようにとmitoが開発しやすいようにという目的がありました。(最後は自己中)この時に、前にインターンシップでお世話になったメンターさん(ぎあもとさん)やぱらぱら、nemu_souなどにどういう風に開発を進めていけば良いか相談に乗っていただいていました。ありがとうございました。開発はじめ開発では一番最初に、ConstraintLayoutというレイアウトの組み方を教え実際に体験してもらい、使えるぐらいにはマスターしてもらえたはずです。その後、Android開発の仕方(主に、ライフサイクルやリソースファイルに関して)を教えて、あとは各々に開発のヒントを出して調べながらやってもらうという方法で進めました。このときに、その開発期限を明確にしなかったのが問題の始まりではなかっただろうかと考えてます。開発期限を明確にしなかったのには一応理由があって、自分以外がAndroidアプリ開発ほぼほぼ初めてでどれくらいでその機能を調べながらできるかの予想ができず、自分の頃を思い出そうにも自分の場合は学業など他のことを気にせず集中してやっていたし3年以上前のことであまり覚えてなく参考にならなかったです。時々進捗を聞いてどれくらいの期間で終われそうか各々決めていこうとしました。「一応書いたんですけど、なんかうまく動かなくて」→「コードをGitHubにあげて、見るから」→「あげます(あげるとは言っていない)」→「あげた?」→「あげていないです、あげます(あげるとは言っていない)」みたいな感じで、想像以上に進んでいなかったです。何が悪いんでしょうかね(mitoが甘い)嬉しい誤算その中でも、一番嬉しい誤算だったのがたぴおかです。彼女は一年生ということもあったので、mitoも周りもとりあえず開発やプロコンの雰囲気とかに慣れてもらおう、本人がやってみたいということ(プロコンに関すること)を優先的に挑戦してもらおうくらいの気持ちで考えていました。それで、本人に聞くと「コードが書きたい」ということだったので、最初に一番簡単な機能のタスクを与えました。すると、なんということでしょう。ぴおか「完成しました、プルリク投げました」mito「一番最初にプルリク投げてきて、それも完成して修正するとこもそんなないやんけ、ウケる」こんな感じでした。(多少の誇張や捏造はあります)そう、一番最初にプルリクを送ってきて、一番最初にタスクを終えたのです。(mitoを除く)この時は本当にびっくりして、素直にすごいと思いました。その後、まだコードを書きたいと言っていたので、少しずつ難易度を上げながらタスクを振っていったのですが、それらをことごとく、「完成しました、プルリク投げました」っていうので、超優秀だと思いました。最終的にはりんぱんまんに振っていたタスクに近いレベルのタスクを投げても終わらせてきたので本当に驚き。mitoの50を超えるコードレビューに対しても折れることなく全て修正してきました。(優秀)このころあたりから、同級生とかと「1年生ってプロコンでこんなにコード書いたりタスクこなしたりだったけ?」という話を何回もした記憶があります。ここではたぴおかの話しかしてませんが他のチームの1年生である、きしりん・2tf・らずも優秀だと思ってます。ぴおかには開発以外でもアプリアイコン作成をやってもらいました、良いアイコンになったと思います。夏休み後半や終わったあたりから、チームりんごのベーコンのるいこやきしりんからAndroidアプリ開発に関しての質問が飛んできて、自分のチームメンバーよりも多く質問され答えた覚えがあります。この時に、がっつりと質問に関する開発を教えながらうまく進めることができなかったのですが、そのツケが後々来ることになります...結果Androidアプリ開発をmitoはずっとやっていたので、今回のプロコンの開発は例年よりスムーズに進んでいって、プロコン出発前にはデモで見せるような機能はほとんど出来上がっている状態でした。実際、本戦でのデモの前もデモ用のデータを追加したり少し修正したりくらいで済みました。本来であればそうでないといけないだろうし、mito的にももっと早めに一通り終わらせる予定だったのでそこは残念でした。提出書類作成(操作マニュアルや動画、パンフレット原稿)基本的に、ウエハラにお願いしてそれっきりでした。例年通りみたいな結果になってしまって、申し訳なかったです。ベースをウエハラに書いてもらって、それをmitoやM教授が添削して〜っていう感じを繰り返していました。チーム紹介動画チーム紹介動画に関しては、短い動画をいくつか撮ってそれをisatakuに投げて編集してもらいました。istakuには、この紹介動画以外にもプレゼン中に使う動画も作ってもらいました。編集がめっちゃ上手くて助かりました、ありがとうございます。この動画ではmitoとりんぱんまんがリフティングしてウエハラとたぴおかが話をした後に、mitoがチームメンバーに設計の話をしているところがあります。大変だったけど動かないSlackのチャンネルチーム結成からプロコンに行くまでの期間中、チームのSlackチャンネルでの発言がとても少なく、喋っているのはmitoかウエハラだけという状況がずっと続いていました。最初の方はまだ打ち解けていなかったのもあったと思うんですがあまり話し合い等は活発的ではなく、集まりもほとんどないような状態でしたがプロコンが近くなるにつれて自然とSlackでコメントする人も増えていって雰囲気も良くなってきていたと思います。(アイスブレイク大事ですね!)チーム開発やコミュニケーションなどで多くの問題点や課題が発生していました、それらに関しては都度、他のメンバーにもどうなっているかどうした方が良かったかというのを話していっているので、来年以降に活かされることを願っています。やったこと今回のプロコン本戦に行くまでの期間で、mitoはメンバーに対してひたすらこれやった?これ今から考えなくていいの?という役割と進捗管理をずっとしていました。思っていたより、みんなやるべきこととか見えてなくて忘れてたり楽観視してたりしていました、それをmitoが問い詰めるみたいな形になっていたので、特にリーダーはリーダーとしての役割ができていないと結構落ち込んでしまっていたのですが、今年の経験を覚えて次に活かしてくれれば良いと思います。最後にお気づきの方しかいないと思うのですが、この記事ではまだプロコンに行っていません!(表現が合っているのか微妙)なので続きの記事が存在します。高専プロコン当日の話です、今から書くのでしばらくかかります。Calenderの21日目の記事です。こんにちは、mitoです。最近、Android関係で詰まったことなどばかりを記事にしていたのでどういう風に書けば良いか悩んでいます。前日は1年生のふんど君による記事でした。1年生の頃から大会に参加していてすごいなという感想を抱いています。頑張って一つと言わずたくさん作って欲しいです。全力で絡みに来るらしいので全力で待っていますね。諸々あって出来てないです。関わった人に許諾を取っておたすけじゅーるを公開しようとしています。まあ今回はアプリをリリースしてないのでただ振り返ってみようと思います。※書き始める時はさっと終われるくらい短くしようとしていたんですが、今年あったことを書いていったら4000字近くにもなっていたので、興味ない方や忙しい方は最後らへんの「この一年」くらいを読むといいかもしれないです。チーム決め〜プロコン結果発表までチーム(リーダー)決め今年の初めごろにプロコンに参加するということでチーム「ましゅまろココア」が結成されます。メンバーとしては、mito、りんぱんまん、えびな、えのき、cmyUEの5人です。このチームでmitoはリーダーを務めていたのですが、結成される前はリーダーはしたくないと思っていました。今年のチームのメンバー決めの前にリーダーやったことある人出来そうな人が集まって誰がリーダーするのかみたいな集まりがありました。その時、割と人数がいたので「あ、これは自分はやらない感じになりそう」って思っていたのですが、気付いたらリーダーになっていました。リーダーの役割が嫌いというよりはリーダーに自分は向いていなくて(優柔不断なので)、それよりも補佐的な感じでリーダーの人に「あれ、終わったの?、〇〇忘れてない?」みたいな感じでいう役割の方が向いていてそっちの方がやりやすいと感じているからです。チームが結成されてからは、嫌々リーダーをやっていたわけではなく、「リーダーになったからにはちゃんとやってメンバーと一緒に本戦に行くぞ」とい気持ちで臨んでいたので心配しないでください。甘いというのもあってなかなかメンバーを集めてアイディア出しを行うことができませんでした。結局、企画書にできそうなアイディアを出せたのは提出期限1週間前くらいで、企画書を1週間で作り上げないといけなくなりました。なんとか提出日に遅くまで学校に残ってきしもんに手伝ってもらいながらりんぱんまんと完成させて提出することができました。(他のメンバーは寮生なので早めに帰ってもらいました)結果は予選敗退でした。理由としてはギリギリにしかアイディアを出すことができていなかったのでそのアイディアが実現可能か実用性があるか調査・検討が出来ていない上に企画書に時間を当てられなかったのが大きかったと思います。その後プロコンの結果が出た後、チームのメンバーでもう一度集まってこれからどうするかという話をして、またこのチームで別の大会に出ようということで話が決まりました。メンバーを集めることができず結局流れてしまい、mitoが抜けました。うまく回せなかったりメンバーを集めれなかったり途中で抜けてしまったりでメンバーには大変申し訳ない気持ちです。プロコン後プロコンに落ちチームからも抜けたmitoは大会に出ない人となりました。去年一昨年とパソコン甲子園からビジコンまで参加し1年中何かに参加しているということが続いたので、何の大会にも参加しないという日々が久しぶりで久しぶりでした。久しぶりにこういった時間が確保できて、気持ちに余裕を持っていろんなことをできました。Jetpackに関して調べたりゲームしたりエトセトラ...PS4を買ったのでまたゲームにハマってしまいました...(現在進行形)また、この時間を使って夏休みには3社にインターンシップに行きました。インターンシップでは、いろんな知見が生えまくってとても良い経験となりました。本当にありがとうございました。インターンシップに関してはいつかの高専だよりに掲載される予定なのでそこを見てください。Uに参加することとなりました。こちらもなかなかメンバー全員で集まらず大会数日前にSkypeでアイディアが決まり、開発・プレゼン作成が始まるという超ハードスケジュールとなってしまいました。その開発期間にmitoはインターンシップに来ており大会当日も参加しないという形になってしまい、大変申し訳なく思っています。参加し両年でベストデザイン賞に終わったパソコン甲子園。ベストデザイン賞も嬉しいんですが、グランプリ狙えると思っていたので残念だった大会です。今年からは年齢の関係で参加出来ていないのですが、去年同じチームだった破壊神ことびーまかがいるチームがグランプリを取って、更に「先輩たちのリベンジができた」って言ってくれて最高に嬉しかったです。去年の初めくらいから13thにAndroidアプリ開発を教えるというところから始まったしゅうがくりょーこん作成計画。去年、mitoとnemu_souが教える立場になってAndroidアプリやサーバーサイドについて教えながら13thの5,6人くらいにしゅうがくりょーこんを作成してもらい、mitoが統合・調整して完成。実際に去年の自分たちの研修旅行で使うことができました。今年の研修旅行でも使うみたいな話が出てきて自分は最初、去年のやつで重要なバグを直せば使えるなと思っていました。デザイン等も一新して1から作り直すことになりました。mosmos_syrcさんの勉強ということで1から作り直すことになりました。そこまでは、「あ、やるんだ。頑張ってほしい」くらいにしか思っていませんでしたが、諸々あって研修旅行1ヶ月前くらいになっても作り始めていないという事態になってしまっていたので、急遽しゅうがくりょーこん作成にjoinすることが決まりました。😇(もともと教える予定ではありました)joinした瞬間、もはやその前から炎上が確定しているプロジェクトはなかなか面白かったですよ。なんやかんやあってなんとか当日までに去年より良い点呼を取ることができました。他2人がAndroidアプリ開発初心者だったので教えながらなということと自分もあまり進捗を出すことが出来ずにギリギリまでコードを書いていました。Jetpackの内容使えたし、設計についても考えられたし知見が生えまくったのでとても良かったです。(ギリギリまでやっていたのが良いわけではない)Android講座mitoが自分の知りうる情報を後輩に教えてAndroidアプリ開発について話ができる人が欲しいということから始まった講座です。Twitterで軽く呟くと想定していた人数よりかなり多い人が反応してくれて嬉しかったです。今の所、まだ一回しかできていませんがこの記事が公開される予定の今日に第二回、年明けた2019年には週一から2週に一度くらいのペースで行って行こうと思うのでお待ちを...!この一年この一年は本当に長く感じています。プロコンの企画書を書いていたのは遠い昔のような感覚。この記事を書いていて「この出来事があったのは去年じゃなく今年だった...」みたいなのが多かったです。(初めてインターンシップ行ったのも今年だし...)今年度から寮外生になり、3年生までのびっちり入った時間割と比べ物にならないくらいスカスカな時間割、大会に参加しない後期と色々と環境に変化があった年でした。その空いた時間を今まであまりできなかったことに当てたり自分について考えたりする時間が多く確保できました。ゲームにまたのめり込むこともできました。今年はチームに対して大変申し訳ないことをしたのが多かったです。来年、チームを組んで大会に参加するということになれば今年のようなことは起こさないようにしたいです。最後に最近、ゲームにハマってしまいICTに行く機会が減ってきているんですが年明けたらもっと多くの頻度で行きます、きっと。駄文になってしまいましたが、ここまで読んでくださった方には感謝の言葉しかないです。明日は、去年卒業したコーヤ・ロードアゲイン先輩と同級生のがちゃみんです。コーヤ先輩を知らない後輩達のために説明すると技術強強な面白い先輩です。みんはきっと良い記事を書いてくれる。JetpackのNavigationで遷移先のFragmentに値を渡したくなって、safe-argsを使ってみようと試そうとし、公式のページとか見ながら追加しようとしたら怒られた。他のサイトとかも同じように書いてあったりしたので大丈夫かと思ったらそんなことはなかった...。'androidx.navigation.safeargs'を追加しました。見ていたページの前後を見てみても特にそれ以外に追加すべきなものを書かれていませんでした。解決法ググって、stackoverflowでこのページを見つけました。この回答を見ると、"そのクラスパスじゃなくてこっちのクラスパスで試してみて"みたいなこと書いてあり、「クラスパス...?何か追加したっけ....」と思い、質問の方も確認して見ると...なんということでしょうapp/build.gradleのdedependenciesにclasspathが追加されているではありませんか(某番組風)ということでこの質問と回答を参考にapp/bundle.gradleに以下を追加しました。"android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha05"そして、syncすると通りました。まとめ公式だけしか見ないのは罠pluginとして使うからclasspathが必要なのは当たり前なんて言われてしまうとごめんなさいとしか言えなくなります...直接は関係ないけど、gradleについてまだよくわかっていないので、"build.gradleにこれを追加して"と言われてもどれ...というお気持ちになってしまいませんか。既存プロジェクトにMVVMを導入しようとしてViewModelProvidersを使おうとした。fragment"と言われ失敗する。解決方法build.gradle内のrepositoriesの中にあるjcenter()とgoogle()の順番を入れ替える。RefactorをおこなうとJavaやKotlinのコードが書き換えられるだけでなくbuild.gradleのimplementationのリンク(?)も書き換わります。Syncした際に、「android-ktxのcoreが見つからない」みたいなこと言われて失敗しました。'androidx.core:core-ktx:1.0.0-alpha3'に修正します。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。