みんからきりまで

きりみんです。

DroidKaigi2018で「How to improve your MVP architecture and tests」という題で登壇してきました。感想編

こんにちは。きりみんさんです。
先日、DroidKaigi2018というカンファレンスで登壇をしました。

タイトルは「How to improve your MVP architecture and tests」で、Mode-View-Presenterパターンを利用した時の設計アンチパターンとその改善方法、テストの書き方や知見などについて話ました。

こちらがそのスライドになります。
speakerdeck.com

内容の補足などはまた別エントリーで書きたいなと思いますが、今日はとりあえず熱が覚めないうちに当日の気持ちを書きなぐりたいと思います。

初めてカンファレンスで登壇した結果

今までLTで5分や10分などの発表はやっていましたが、本格的なカンファレンスでの登壇というのは初めてでした。

スライドも前日ギリギリまで何度も修正していて、当日の早朝にようやく最終リハーサル練習をやるという感じでした。

本番はしつこく宣伝していた効果もあってか、立ち見もいっぱいで入れない方がいるほどの大盛況だったようです。

一方ぼくは直前のオープニングセッションで一番まえの席に座ってしまったため、エレベーター渋滞に巻き込まれてしまいギリギリに到着するというやらかし。

セッション本番では朝イチでみんなテンション低めだろうなと予想したので、緊張してグダグダにならないように、出来るだけテンションを上げて楽しく盛り上げてやろうと若干ハイになって明るく振る舞いました。

これはKotlinConfの時のしらじさんのセッションでの勇姿がとても印象に残っていたからで、とても参考にさせて頂いたし、おかげであまり緊張せずに話すことが出来ました。

セッションは時間どおりで無事終わり、セッション後にはたくさんの人に内容について質問して頂き、楽しくお話できました。

DroidKaigiは最高の大規模オフ会だった

自分の登壇が早々に終わったので、残りのDrodKaigiは心も軽くたくさんの面白いセッションを周ったり、たくさんの人とお話することができました。

特に今までTwitterでしか絡んだ事が無かった方や、完全に初めましての方、そして以前いろいろな現場で一緒にお仕事をしたことがある方など思いがけずとてもたくさんの方に話しかけてもらい、最高の時間を過ごすことが出来ました。

カンファレンスでは以前作った自分のアイコンがプリントされたTシャツを着て行ったのですが、そのおかげで本当にいろんな人に「あ、きりみんさんじゃないですか!」と気付いて声をかけてもらって、本当に嬉しかったです。
声をかけてくれた皆さん、本当にありがとうございました。

感じたこと

登壇をすると友達がたくさん増える!
登壇が決まってからの数ヶ月間はずっとスライドづくりの事が気になって他の勉強や趣味が全然手に付かなかったのですが、それでも本当にやってよかったと思います。

そして、たくさんの知見あふれるセッションを聞き、Androidエンジニアの仲間たちとプログラミングについて熱く語り合い、刺激をもらい、とにかくもっとたくさんコードが書きたくなりました。
日本のAndroidコミュニティは本当に暖かくレベルが高く勢いがあり、本当に素晴らしいと思いました。

Androidサイコー!!!!!!!!

Live2DとFaceRigで今流行のアレになる

こんにちは、日々可愛くなる鍛錬を怠らない幼女、きりみんです。

最近アレ流行ってますよね。バーチャルなんとか。
ぼくも大好きなので、ついつい触発されて似たような事がやってみたくなりました。
とはいえぼくは3Dモデリングの素養は全くないので、Live2Dという二次元のイラストにアニメーションを付けられるソフトと、FaceRigというWebカメラで顔面をトラッキングしてキャラクターの動きを同期させられるソフトを利用して、それっぽいことを試してみました。

Live2D
Steam:FaceRig
FaceRig Live2D Module on Steam

元のイラストはこんな感じです。
いつものアイコンキャラを描いたつもりです。

https://i.gyazo.com/5181606344e2f69a3af0595a3003cd5d.png

ぼくは普段イラストにSAI2を使用しているのですが、今回はLive2D用なので線画、塗りの時点でパーツごとにレイヤーを分けて分離しやすいようにしました。

https://i.gyazo.com/f495a30f6110688479f5c8478f5e7553.png

SAIからpsdファイルにExportし、Live2Dに読み込むと、以下のようにそのままレイヤーの情報が残っていて便利でした。

gyazo.com

あとはLive2Dのチュートリアルに従って動作を設定していきます。
このチュートリアルがとても分かりやすくて、Live2D自体も簡単なので特に苦戦せずに作業が出来ました。

1.イラストの加工 | Live2D Manuals & Tutorials

長いですが作業の様子を録画していたので興味のある方は適当に2倍速とかでどうぞ。

www.youtube.com

FaceRigへのモデルの読み込みはこちらを参考にさせてもらいました。

FaceRigでLive2Dアバターを動かしてみる - Qiita
Cubism Editor 3でのFaceRigモデル作成注意点 — Live2D コミュニティ

そして出来たのがこちらになります。
塗りの時点で手を抜いたのが致命的な被害をもたらしていて悲しい。

https://i.gyazo.com/73513464a48338a141e520d771340a25.gif

喋らせてみました。

以上になります。
DroidKaigi直前に何をやってるんでしょうね。。。

DroidKaigi2018で登壇します

こんにちは。

2/8に開催されるDroidKaigi2018の1日目、11:20よりRoom1で「How to improve your MVP architecture and tests」というテーマで登壇します。

タイムテーブル | DroidKaigi 2018

内容は今のところざっくり以下のようになっています。

・自己紹介
・paymoの紹介
 ・Android版paymoでのクラス設計
・MVPアンチパターンと改善案
 ・MVP概要
 ・MVP採用プロジェクトアンチパターン
  ・サンプルコード解説
 ・改善案
  ・ViewとPresenterを分離する
   ・サンプルコード解説
  ・Presenterにテストを書く
   ・何故Presenterにテストを書くか
   ・Presenterへのテストの書き方
   ・Mockitoについて
   ・サンプルコード解説
・実際にプロダクトでPresenterにテストを書き始めて感じた難点
・テストコードをリファクタする
 ・サンプルコード解説
・Presenterの処理をドメインモデルに移譲する
 ・サンプルコード解説
・まとめ

カテゴリでは中・上級者となっていますが、MVVMなどでバリバリテストを書いてますというレベルの人にはあまり刺さらないかもしれません。
どちらかと言うと、CleanArchitectureっぽい設計にはしてみたけどテストは書けていなかったり、具体的にどの程度カッチリ型に嵌めどういうコードに落とし込めば効果的なのかイメージがなかなか掴めない方などが対象という感じです。(Twitterで行ったアンケートの結果を反映させています)

事前にスライドと解説に使用するサンプルプロジェクトを公開予定です。
サンプルコードは全てKotlinで書かれていていますが、語られる考え方自体はJavaiOS開発などでも通用する内容だと思っています。

ぜひ聞きに来てください。

2017年の目標は「もあぐれっしぶ」でした

2017年ももう終わりですね。
実は2017年には目標がありました。
それは、おそらく誰も気に留めなかったであろうさり気なくツイートしたこれです。

というわけで今年の目標は「もあぐれっしぶ」だったのでした。

実際、今年は自分でも驚くほどアグレッシブな年だったと思う。
たくさんの新しい事に挑戦することが出来た。
思えば去年の今頃はちょうど仕事の切れ間で、次にどんな仕事をするべきか、自分はどんな事をやっていくべきかと色々悩んでいたので、この1年でずいぶん環境が変わったなぁとと思い感慨深い。

正社員になった

今年一番の変化は4年ぶりくらいに正社員として就職した事だと思う。

kirimin.hatenablog.com

kirimin.hatenablog.com

AnyPay社には元々業務委託として参加していて、そのままでも別に良かったといえば良かったのだけれど、せっかくの機会だし、そろそろ勇気を出して新しい事に挑戦する時期かなと思ったので、正社員としてガッツリ一つの会社にコミットしてやっていくことにした。

英語学習が実を結びTOEICを受けインタビューを受けた

去年からちょっと真面目にやり始めた英語学習が実を結び始め、春にはTOEICを受け650点を取りブログがバズり、夏にはその件でDMM英会話さんからインタビューを受けるまでに至った。

kirimin.hatenablog.com

eikaiwa.dmm.com

英語はまだまだだけど飛躍していきたい。

パスポートを取得し台湾、中国、アメリカに行った

英語が少しだけ出来るようになったというのもあり、冬にパスポートを取得し、春には友人と台湾へ旅行をした。

kirimin.hatenablog.com

そして夏には中国の上海や深センへ行き最先端のITインフラやキャッシュレスの様子などを見てきた。

kirimin.hatenablog.com

冬にはサンフランシスコへ行きKotlinConfというカンファレンスに参加してきた。

kirimin.hatenablog.com

これは自分のGoogleMapのタイムラインだけど、去年人生で初めて神奈川より西(京都や福岡)へ旅行へ行き、今年は初めて国外の土を踏み、初めて大陸の土を踏み、アメリカの土を踏んだ。
1年間あまりの話とは思えないほど世界が広がったような気がする。

https://i.gyazo.com/2a016cf26b11a4bc5f36c2933cb25f6d.png

キャッシュレス生活を始めた

キャッシュレスな思想を持った会社に入ったということもあり、今までの現金主義を完全に捨て、電子マネー中心のキャッシュレス生活をするようになった。

kirimin.hatenablog.com

今では財布を使わない事が当たり前となっていて、現金を使う機会は日常ではほぼ存在しない。

勉強会への参加、ブログの更新、SNSでの交流などをアクティブに行い知り合いが増えた

元々メンタルが弱く人付き合いが苦手というのもあり、Androidエンジニア界隈では一方的にウォッチしている事が多く、あまり積極的に交流をしていなかったのだけれど、今年はたくさんの人と知り合い、仲良くなる事が出来たと思う。
「きりみんさんですよね?」とか「ブログ読んでます!」と声をかけて貰える事もたくさんあり、本当に嬉しかった。
仕事関係でも今まではあまり縁の無かったような色々な人たちと知り合えたりして、刺激的だった。 とても内気で受け身なぼくと仲良くしてくれる優しい方がたくさんいて、とても幸せな事だと思った。

DroidKaigi2018のセッションに申し込み登壇することになった

今年のDroidKaigiに出た時に「次は自分も登壇したいな...」と漠然と思ったけれど、気がつけばDroidKaigi2018で本当に登壇することになっていた。
期待を裏切らないように精一杯準備して挑もうと思う。

まとめ

他にも暗号通貨にハマったり、部屋をスマートホーム化したり、色々な事をやってみた。
今年はずっと心の何処かに「もあぐれっしぶ」という意識があったせいか、気がついたら本当にアグレッシブな一年になっていた。

あまり大々的に先の目標を決めたりするのは性に合わないので控えたいんだけど、あえて来年の事を少し考えるなら、今年はエンジニアリング以外の挑戦やアウトプットに終始してしまった所があると思った。
その間にも周りのエンジニア達は着実に技術力を高めているなぁと感じる。
来年は一度自分のエンジニアとしてのスキルや活動を見直し、もっとエンジニアリング力の底上げをし、一段上のエンジニアになりたい、そんなふうに思ったりする。

エンジニアのフリーランスの始め方/働き方/やめ方。あるいは業務委託の利点と正社員の利点

この記事はフリーランスアドベントカレンダーの19日目です。

adventar.org

タイトルはmizchi氏のこちらのエントリをパクりました。

mizchi.hatenablog.com

何故かというと、このエントリを読んで「ベンチャーからフリーランスになった人」との対比として「フリーランスからベンチャー社員になった人」という視点でエントリを書いてみたいなと思ったからです。

といっても、ぼくは別に廃業したわけではないので、正確にはフリーランスをやめてはいないし、副業としてコード設計のアドバイスしてほしいみたいな話は歓迎ですし、今後ずっと正社員として生きていくという気持ちがあるわけでも特にないです。

はじめましての方に説明すると、自分の経歴は

情報系専門学校卒業 =>
新卒で零細SIer(Android) 1年 => 
転職して零細ゲーム会社(Unity) 2ヶ月 => 
フリーランス(Android) 3年半 => 
AnyPayに正社員として入社(Android)

という感じです。
ちなみに元は不登校からのニートでした。

フリーランスになった理由

最初に経験した2社で完全に精神を消耗してしまい、しばらく転職活動をするような気持ちにはなれず、とはいえ働かないと家賃が払えず田舎に帰るしかなくなるので、何かアルバイトなどをしようと思ったが、色々調べたところプログラマのアルバイト募集はあまり存在せず、どうせならフリーランスになって業務委託で働いた方が収入も良いという事が分かったので勢いでなった。

ぶっちゃけ追い詰められて現状打開の捨て身の一手という感じでした。

フリーランスの始め方

開業届を書いて出します。以上。

いや、実際別に何か資格があったりするわけじゃないのでそれだけです。
ではどうやって仕事を得るか。
いくつか方法はあると思うのですが、特に人脈やネームバリューがない状態であれば、フリーランス向けのエージェントに登録し仕事を斡旋してもらうというのが王道な気がします。

実際ぼくも最初は開業と同時にエージェントに登録し、フルタイムで常駐する仕事を紹介してもらいました。
これは実質派遣や出向と同じ働き方ですが、フリーランスの場合は派遣や正社員での出向に比べエージェントとの関係は対等になるため、ある程度尊厳をもって自由に行動や単価交渉などをしやすいですし、エージェントのマージンを引いてもかなり収入は高くなります。(特に若いうちは)

ちなみにぼくは最初はエージェント経由での常駐の仕事でしたが、その後は色々な縁で直契約での常駐や請負の仕事もやったりしました。

フリーランスになるための技術レベル

※自分はモバイルエンジニアなので、モバイルエンジニアの経験と知識に基いて書きます。

フリーランスになりたいけどどのくらい技術力があればなれるのか分からない、という人は多いと感じます。(よく聞かれる)

ぼくの経験では、フリーランスになるだけであれば特別高い技術力は必要ないです。
特に常駐の仕事であればやる事は正社員や派遣と同じなので、今現在エンジニアとして仕事がそこそここなせていて、自分の担当分野で一通りの事が単独でこなせるだけのスキルがあれば十分やっていけると思います。
特にSESをやっている会社に正社員で務めていて、よその企業で常駐して仕事がやれているのであれば、フリーランスになってもやる仕事はほとんど同じです。
取られるマージンが7割から2割くらいに減る代わりに仕事がなくなっても帰れる場所や保証が無くなるというだけです。

請負の仕事に手を出すのであれば、責任を持って単独で全ての問題を解決し期限内に納品する必要があるため、もう少し高いレベルが要求されるかもしれません。

しかし実際、自分が3年半フリーランスとして色々な職場で色々なフリーランスのエンジニアと一緒に仕事をした経験では、フリーエンジニアの技術レベルは本当にそれぞれですし、もちろんとても優秀な人もいますが、中にはなんでフリーランスになろうと思ったのか謎なくらいスキルが低く受け身な人もいました。
それでもなんとか仕事をこなせるスキルと、現場で怒られたり仕事を切られたりしてもめげずに続けるメンタルがあれば十分やっていけているようです。

正直特別フリーランスだからといって正社員のエンジニアに比べてプロフェッショナルでハイスキルな人材ばかりだという期待は企業側もエンジニア側もしない方がいいかなと思います。(それは残念な事ですが)

エージェントと直契約のメリデメ

フリーランスになったのに結局エージェントと契約して働くというのはかっこ悪いと思われるかもしれません。
しかし、人脈やネームバリューがなくてもエージェントから有名企業などの仕事を斡旋してもらえるというのは有り難いですし、エージェントが契約周りや現場との交渉などを代行してくれるので、法律の知識がないことにより極端に不利な契約をさせられたり、理不尽な扱いを受けて何も対抗出来ないといった心配がほぼなくなります。

一方で、知り合いなどから直接仕事をもらう場合は、こちらがきちんと要求しないと契約書や単価の詳細をなあなあのまま進められてしまったり、トラブルにあった時に相談する相手がいないといったデメリットがあります。
ただし、もちろん直契約の方がマージンがない分より高額の単価になりますし、エージェント側のルールに縛られるという事もなくなるので、トラブルがあっても現場の偉い人と自分で戦えるという自信があればその方がよいかもしれません。

フリーランスに向いていると思う人

これは色々あると思いますが、個人的には何より「業務外に自分で学習する意欲がある人」かなと思います。
基本的にフリーランスはもうスキルを持っている即戦力の人材として採用されますし、教育コストをかけなくても日々最新の技術をキャッチアップして仕事をしてくれることを期待されます。
なので、業務時間以外では一切学習や技術的な行為をしたくないという人は正社員として(大きめの会社で)働いた方がいいのではないかと思います。
逆に自分でどんどん学習して成長していけるタイプの人は、年齢に(あまり)関係なくどんどん現場で力を発揮して単価交渉をして短いスパンでどんどん収入を上げていけるでしょう。

特にぼくのような学歴・経歴が散々で、しかも面接が超苦手というタイプの人間は、とりあえずあまり期待されずにいつでも切れる業務委託として有名な会社に飛び込み、そこで実力ベースで評価を得て単価や人間関係を勝ち取っていくという道があったのは、本当によかったなと思っています。

あと、自分の場合は学校に行かずに育ったということもあり、何か組織に所属するということに対して安心感よりも閉塞感を強く感じてしまう方なので、そういう人には気楽で良いと思います。

フリーランスの収入

高いです。
20代であれば多分正社員とは比較にならないほどの額が手に入ります。
よく「フリーランスの場合は正社員の○倍くらいは貰っていないと実質損だ」みたいな話がありますが、たしかに時期によってムラのある請負の仕事を複数まわして生活している方などの場合はかなりリスクもあり、単に年商が高いというだけでは喜べない面も大きいと思います。
しかし、エンジニアで常駐の仕事をしている場合は、毎月固定の収入があり安定していますし、万が一突然仕事を切られたとしても、最近の情勢では一定以上のスキルがあれば長期間次の仕事が見つからないということはあまりないと思うので、それほどリスキーではないのかなと個人的には思います。

税金が高いという話についても、あまり正社員だったことがないのでどのくらい正社員の税金が安いのかイマイチ理解していないせいかもしれませんが、まっとうに経費を計上していればそこまで大きく正社員と個人事業主で税額が変わるということもないのでは?という気がしています。

ちなみにぼくは年商ベースで、フリーになった直後で新卒時代の年収の2倍、その後単価が上がり最終的に3.5倍程度になりました。(新卒時代が安かったんですよ)

なぜ正社員になったか(フリーランスの難点)

3年半ほどフリーランスで仕事をし、2月から業務委託として手伝っていたAnyPay社に8月から正社員として入社しました。

理由は縁という面も大きいですが、フリーランスエンジニアとして抱えていた色々な課題感みたいなものもあったりします。

現場の技術以外の事に意見をしにくい

ぼくはエンジニアリング以外にチームビルディングや組織づくりなどにも関心があり、また職場にいるとどうしても採用や人事など自分の仕事と関係ない事にも意識がいってしまい、色々と言いたくなってしまうところがあります。
一方で自分の中に「自分は業務委託なのだから他所様の会社の技術以外ことに口を出すべきではない」という気持ちが強くあり、「もっとこうした方がいいと思うんだけどな」と思いつつ口には出せず、また、業務委託という立場だと長期戦略的な会議には呼んでもらえないなどという事もあり、なかなかもどかしく感じる事が多々ありました。

携わっている仕事についてはっきりと言及しにくい

また、業務委託の大きな難点として、一般的にあまり自分の携わっている仕事内容についておおっぴらに言いにくいという事があります。
他の同世代のエンジニア達がLTやブログなどで、自身の携わっているプロダクトやその知見について堂々と語り、責任を持ってプロダクトと向き合い、それを自分の実績として積み重ねていっているという事に対して羨ましく感じていました。

面白い仕事を見つけるのが意外と難しい

業務委託で技術レベルの高い職場を見つけるのが難しいという問題もあります。
会社の求人情報に業務委託の募集を載せている会社はあまり多くないですし、勉強会や技術ブログなどで名前をよく聞くバリバリ技術志向な会社ほど、優秀な人材を少数の正社員として雇いきちんと育てているという印象があります。
もちろん本当に優秀で有名なエンジニアの方はバリバリの会社に直接声をかけて貰い業務委託として仕事をしているケースもありますが、それもやはり正社員時代の実績や経歴が元になっている部分もあるのかなと思ったりします。

つまり

エンジニアとしてほどよく稼ぎ楽な仕事をしているだけであれば、当分はフリーランスのままやっていっても良かったのですが、それ以上踏み込んだスキルとキャリアを目指したいと思った時に、逆に今のままでは厳しいのではないかという気持ちが芽生えてしまったのです。

正社員になってみて

やはり正社員としてプロダクトに関わると、プロダクトが成功して貰わなければ困るので圧倒的な当事者意識が湧いてきますし、やりがいを感じて楽しいです。(やりがい搾取ではありません。搾取されていません)

堂々と「このプロダクトを作っています!」と言えるのは幸せなことだと感じるし、プロダクトのデザインや戦略にもうるさく口を出したり、勝手にプロダクトの宣伝をしたりして楽しく暮らしています。

もちろん正社員には正社員特有の面倒なこと、プロダクトに真剣に向き合うからこその悩みや摩擦やもどかしさなどもありますが、まあそれはそれでという感じです。今のところは。

ちなみに今の年収はフリーランス時代の年商より少し少ないくらいです。

正社員として就職するむずかしさ

今回のぼくの場合は、元々業務委託として働いていた会社に縁あって正社員として入社するという形でしたので、入社してからのギャップのようなものはあまり感じませんでした。

しかし、普通転職活動をする場合は、いくら会社の事を調べても実際のところは入社してみないと何も分からないという問題があります。

それは開発体制や技術レベル、人間関係の実態もそうですし、就業規則や残業規定、給与体系なども入社して初めて詳細を知れる場合がほとんどです。

業務委託の場合は事前に単価や稼働時間を含めた契約書を確認した上で契約を交わすのが普通ですし、入ってみて労働環境が期待と大きく違っていた場合は契約期限を終えれば簡単に逃げる事が出来ます。

それに比べると正社員として転職するのにはかなりのギャンブル要素があると感じます。
これはもっと改善出来る余地があるのではないかなと思っていて、就業規則や給与体系を求人の時点で明瞭に知る事が出来る、あるいは業務委託契約などで少しの間働き会社の実態が分かった上で入社を決められるような世の中になってくれれば、もっと文化のミスマッチや期待とのギャップによる短期間での退職という悲劇を減らす事が出来るんじゃないかなぁ、と思ったりします。