もやもやエンジニア

IT系のネタで思ったことや技術系のネタを備忘録的に綴っていきます。フロント率高め。

RecyclerViewにインクリメンタルサーチをくっつけたライブラリを作った

こんな感じでRecyclerViewにインクリメンタルサーチくっつけたやつを作りました。ライブラリを公開するのは初めてだったりします。

https://github.com/rei-m/filter-recyclerview/blob/master/images/demo.gif?raw=true

github.com

僕はAndroidアプリの開発を仕事として関わり始めたのが Lolipop が出たくらいのときでわりと後発です。特に凝ったことをしない限りはやりたいことを実現するライブラリはだいたい用意されていて、自作のライブラリを作る機会もなかったのですが、上で貼ったキャプチャのViewを作る要件に対応するライブラリはさくっと見つからず。。。

MsvSearchというライブラリがそれっぽい動きをしたけどViewやイベントの拡張ができなくて入れられなかったので、動きの部分だけ参考にして自前で書きました。で、せっかくなのでたいしたコードでもないけどお試しでライブラリ作るにはちょうどいい機会かなと思って、共通化できる部分を切り出して公開してみました。

だいたいREADMEに導入の仕方は書いておきましたが、導入側はフィルターの条件とRecyclerViewの表示部分だけを実装すればいいように作ってあります。

公開はJitPack.ioを使ってGitHub経由で落とせるようにしたのでandroid-mavenプラグインを突っ込むだけでした。お手軽ですな。BintrayにアップロードしてさらにJCenterに・・・というのは今回はやらなかったです。

TextViewでカスタムフォント使ったら InflateException が出るようになった

先日、下のアプリをリリースしました。で、ありがたいことに正月の暇つぶしに使ってくれてるのか、ちょこちょこインストールされてるのですが、CrashlyticsにInflateExceptionが結構な頻度で飛んでくるのに気付きました。

rei19.hatenablog.com

開発中の実機確認は自分の持ってるNexus5xを使っていて問題なかったのですが、試しに嫁が使っている割と古めのXperiaで動作確認してみると確かに落ちました。。。しかも落ちるタイミングが不定期なのでOOMっぽい。↓の画面のViewを作成しようとしたタイミングです。

f:id:Rei19:20170104231035p:plain:w150

原因と対応

  • このViewの札の部分はカスタムViewにしてありました。できるだけ本物の札っぽくみせたかったので縦書きにしてフォントもIPAフォントをカスタムしたものを使っていたのですが、そこの内部がよくありませんでした。
Resources resources = context.getResources();
Typeface typeface = Typeface.createFromAsset(context.getAssets(), resources.getString(R.string.app_font_file));     
setTypeface(typeface);

まあ見ての通りですが、Viewを作るたびにフォントファイルを読み込んでたので、表示のたびにめちゃくちゃメモリを使っていたというオチでした。Typefaceをシングルトンにして一回しか読み込まないようにして解決できました。

  • ↓の画像はFabricのクラッシュ数のグラフです。インストール数の増加に応じてクラッシュ数が増えていくのがわかりますが、対応後は激減しましたね。今回はちょっと確認が甘かったので反省。

f:id:Rei19:20170104234545p:plain:w300

ちはやふるにはまったので百人一首を暗記するアプリ作った

今年もぼちぼち終わりですね。さて、毎年1個くらいプライベートで何かWebサービスなりアプリなりリリースすることを目標にしてるんですが、今年はちはやふるにはまったのがトピックとしてあって、百人一首に興味が湧いたので暗記用のアプリを作りました。

※ちなみに ちはやふるはこちら。勧められて観る前は恋愛ものかなと思ってたらスポ根青春もので展開が熱かったです。開発合宿で聖地巡礼したりしましたね。

アプリはこちら (Androidのみ)

play.google.com

技術的な話

  • 仕事ではkotlinでアプリ書いてるので、今回は一周回ってJavaで書きました。Jack & Jillとか新しいツールも出てきてるし、メインストリームに乗っかったアプリを手元に置いておきたいなあという気持ちからJavaにしてます。
  • 技術的には目新しいことはしてないのですが、個人的に今回初めて使ったのは以下のもの
    • Orma
    • RxJava2
    • BottomNavigation
  • Ormaを使った理由も、仕事でRealm使ってるのでDB使うならSQLiteがいいなあってことで選択しました。一長一短あるなと思ったのですが、Realm使うとRealmに依存する設計になるので、個人的にはOrmaの方が自分の好みには合ってるかなと感じました。あとAuto Migrationが圧倒的に楽ですね。(まあアプリ自体は別にDBなくても作ることができる規模なのでこの辺は使いたいから使ったという感じ)
  • RxJava2はだいぶインターフェース変わったので、思ったより学習コスト高かった印象です。まだMaybeの使い所がよくわかってない。。。
  • そんな感じで技術的なチャレンジはあまりできてないのですが、目標のアウトプットはできたかなという感じで、仕事も気分良く納まることができました。来年は何作ろうかな。

コードはこちら

  • セキュアな情報は含まれてないのでローカルでビルドするには自分で足りないものを埋める必要があります。

github.com

MacBook Pro 15インチが入るいい感じのリュック買った

買ったのはこれ!

  • MacBook Pro 15インチを普段愛用していて、それを持ち運べてかつ機能性に優れたリュックを探していたのですが、色々見た結果、このAer FIT PACKというリュックを買いました。

実物の写真

  • 丸っこいデザイン

f:id:Rei19:20161207231410j:plain:w300

  • 中の収納は豊富

f:id:Rei19:20161207231628j:plain:w300

f:id:Rei19:20161207231840j:plain:w300

使用感

  • 少し小さいかな?と思ったのですが、条件通り15インチのMacBookが入るポケットがちゃんと付いていて、機能性も十分で気に入りました。旅行のお供にはこれだけだときついですが、普段使いにはこれで全く問題なさそうです。
  • 欠点は縦に置くとちょっとバランス悪く自立できないくらいですけど、立てかけて置けば問題無いですね。
  • という感じでAer FIT PACK おすすめです。もっと容量の大きいタイプもあるみたいなので、こちらも紹介しておきます。

君の名は。展に行ってきた。良さがあった。

君の名は。展に行ってきたので簡単なレポートなど。基本的に中は撮影NGなので雰囲気だけ。

f:id:Rei19:20161120133135j:plain:w300

場所

  • 長野県は小海町というところにある高原美術館で開催されています。

  • 小海は新海監督の出身地で、以前にも新海誠展が開催されたところです。僕はその時に初めて行って、この場所を気に入ったので、たまにぷらっと遊びに行くようになりました。

東京からの行き方

  • 電車とバスで行きました。東京から北陸新幹線佐久平へ行き、そこからJR小海線で小海駅または松原湖駅まで行きます。駅に着いたらバスかタクシーで美術館へ向かいます。

  • 電車とバスの時間は事前に調べてからのほうがよいです。小海線は1時間に1本、バスも1時間に1本あればいいという感じなので、タイミングが悪いと新幹線で佐久平についたけど小海線が来ない、とか小海駅についたけどバスがないとか、ありえます。

  • 個人的には、小海駅からの美術館までは、行きは割り切ってタクシーを使って、帰りはバスを使うのがオススメです。今回は君の名は。が予想以上にヒットしたので、いつもは適当につかまえていたタクシーが全然捕まらず、タクシーを呼んだっぽい二人組に声をかけて相乗りさせてもらいました。

  • 昼時に着いたら駐車場は満車だったので車で行く場合は早めに行ったほうがよいでしょう。

見所

  • 美術館自体はそこまで大きくないものの、貴重な絵コンテや君の名は。の原案など、ここでしか見られないものがあり、ファンの人は行って損はないと思います。

  • 美術館自体も山に囲まれた珍しい立地で、隣にはレストランと温泉が併設されています。君の名は。展を見て、レストランでランチを食べて、山々を見ながら露天風呂に入ってさっぱりして帰る、という贅沢な時間をすごすことができます。

  • 来館者一万人達成!

f:id:Rei19:20161120133018j:plain:w300

  • まわりはこんな感じでどこを見渡しても山ですね。自然が気持ちいい。

f:id:Rei19:20161120133541j:plain:w300

  • レストランでのランチ。信州は飯がうまい!

f:id:Rei19:20161120130842j:plain:w300

  • ちなみにレストランに君の名は。に出てくるパンケーキを再現したメニューというのがあるんですが、数量限定で予約制だったので、食べたい人は着いたら、先にレストランに行って予約できるか確認するといいかもしれません。(僕は知らずにいったのでありつけなかった。。。)

おわり

  • 新海作品は秒速5センチメートル以来のファンですけど、今回はめちゃくちゃヒットしたのでびっくりですね。前回の新海誠展に行った時は、僕が行った時間に来ていたお客さんは3組くらいだった記憶があるのですが、今回は駐車場は満車、レストランも満席という感じだったので人気のほどを伺えました。

  • 君の名は。展は12/25日までやっているので、今回でファンになった人も昔からファンの人も、行ってみるとより君の名は。を好きになるのではないでしょうか。

転職してAndroidエンジニアになってから1年経ったので振り返る

去年に一休を退職してから今の会社に入ってちょうど1年経ったので軽く振り返ってみます。

仕事の内容

入社してからやったこととか

  • とりあえずリリース

play.google.com

  • アプリのフルKotlin化。1.0になったタイミングでえいやーでコンバート。
  • スマートUIな作りからレイヤードアーキテクチャを意識した作りにして、レイヤーごとの責務を分割。
  • Model層にDDDの概念を取り入れてみた。
    • これは途中の方針転換でアプリ側で保持する情報が少なくなって、DDDが解決すべきドメインの複雑さは無くなったので元に戻した。
  • DIを取り入れてテストの土台を作った。テストも少しずつ増やしていっている。

振り返り

  • 新規サービス開発担当ということで、割と制約なく自由にアプリをいじくれたのはよかったなと感じました。特に設計周りについてはダイナミックに試して壊してを繰り返して、実際に手を動かしながら学ぶことができたのはよかったですね。
  • けんすうさんを始めとして今まで一緒に働いたことのないタイプの人達と働いているので色々学びが大きいなと感じてます。特にサービスの立ち上げやデザイン部分は新鮮。
  • Androidに集中して色々試せた分、Webの開発からはだいぶ離れてしまったので、ちょっとどうにかしたいなと思ってます。とはいうもののAndroidでやりたいこと多いしSwiftも始めてるのでそっちも置いて行きたくないし悩ましい。

転職とかキャリアのこととか

新卒でSIerに就職した頃は、エンジニア35歳定年説とか、プログラマは下級戦士だから早く卒業して設計書書いてマネジメントする人にならないと、とか色々いわれたような気がしますけど、なんだかんだ手を動かしてコードを書き続けて今に至りますね。Web業界で働くようになってからはそういう話も聞かなくなりましたけど、思うに業界自体が若いからキャリアパスみたいなものはまだないんでしょうね。なので自分のキャリアは自分で意識してかないとなと思います。

前職は特に不満があって辞めたわけではありませんが、5年強も働いてると、サービスは成長してるけど、今の自分の実力は他の会社でも通用するのかな、業界的にはどうなのかなとか思うようになってしまって、ある時ちょっと試してみるか!という勢いで転職決めて今に至ります。いい会社だと思うので、何かのタイミングが合えばまた働いてみたいとも思いますな。

おわり

  • 人生の最終目標はVRでRPGの世界で生きることなので、こつこつがんばります。

We are Hiring的なやつ

Supershipの採用/求人一覧 - Wantedly

適当な就職活動からSEになった話

今、一緒に働いているインターンの子が就活で頑張っていて、自分の時はどうやってたっけ?と、ふと思ったのでちょっと書いてみます。参考になるかは謎。

当時の大学生活

当時がどれくらいかというと2006年ですね。法学部生でしたが、ゼミにも入らず、サークルにも入らず、バイトとゲームばっかりしてました。おおよそ大学生っぽいことをした記憶がない。。。 ゲームはFF11というオンラインゲームにはまってましたね。昼は大学行って、終わったらバイトして家帰ったらヴァナ・ディールに精神を移動するという生活でした。

ファイナルファンタジーXI 公式サイト

※サービス終了すると聞いた気がしたけど、まだサーバーは動いてるのかな?

4年の春から就職活動開始

そんな感じで過ごしてたので、就職活動を始めたものの割と適当でした。無難に合同説明会に行って新卒向けの採用サイトに登録してSPIちょろっと勉強して説明会に行ってーという一般的な就職活動です。その時は大手家電量販店の内定をもらって、俺の就活終わった、あとは今まで通り遊んで過ごそう!という気持ちでした。

ちなみにそこを選んだ理由は、当時やってたバイトが古本屋での本やゲームの買取やら販売やらだったので、その延長線で接客業でいいかみたいな理由です。

転機となる内定者向けのバイト経験

その時に受かった会社の制度で、内定者が実際の店舗で入社前にアルバイトとできる制度があって、長らく務めていた古本屋のバイトを辞めてそれに応募しました。そこは確か2ヶ月くらい働いた気がします。

で、ある時ふと気づいてしまうんですね。自分には向いてないというか、バイトとしてなら続けられるけど社員としてこの仕事で本当に自分は続けられるのかな?と。そう思い始めたら、行動は早くて内定辞退という形でまた就職活動に舞い戻りました。

初めて自分と向き合う

自己分析も対してしてこなかったので、自分がやりたいことなんだろなと初めて真面目に向き合いました。そして出た答えは 何かを作る仕事にしよう でした。もともと昔からプラモデルとか模型とか何か作るのが好きだったんですよね。大学時代もちょいちょい作ってました。

その中でもIT業界を選んだ理由は、まだ若い業界でこの先も伸び続けるだろうという予想と、大学の授業でかじったIT系の授業が面白かったからですね。そこで、初めてシステムエンジニアという職業を知りました。

そしたらSIerの会社に受かった

プログラミングは全くの未経験だったので、研修が手厚いところを基準に選びました。で、受かったところは大手の独立系のSIerで、入社前からそこの会社の研修施設でC言語Javaを中心に勉強しました。ちなみにそこの会社はもうなくなってしまったので業界の移ろいを感じますね。。。

そこで初めてコード書いてコンパイルして動かすという経験をしたわけですが、思いのほか楽しかったんですよね。法学部なのに対して勉強もしてこなかったけど、プログラミングの勉強はすごい面白いと感じました。これなら自分に向いてるし続けられそうだなとも思い、そのままそこに入社しました。

その後はSIer→自社のWebサービス開発→Androidアプリ開発という感じでキャリアをつんで3社目の今に至りますね。

仕事は長く続けられそうなものを探したほうがいいんじゃないか

30歳超えておじさんになったなあと思うわけですが、当時の就職活動始めた僕にアドバイスするとしたら、長く続けられそうなことを仕事にしたほうがいいぞ、ということを伝えたいです。

就職することはゴールではなく社会人としてのスタートなわけで、いい会社に入ることは決してゴールではないんですよね。入った後に何をするかというのをイメージすると後々につながるんじゃないかなあと思いました。

下の記事はすごい共感できるので一読しておくと就活生の参考になるかもしれません。

https://kensuu.com/n/n510a9e7c9a06