Dog Driven Development

プログラミング関連で試行したことや、勉強会参加の記録を残していきます。

週1でリモートワークしているフリーランスの話

本記事は、テレワーク・リモートワーク Advent Calendarの4日目の記事になります。(公開が遅れてしまいました...

アウトプットの第一歩として、ウォーミングアップがてら雑に自分のリモートワークについて書いていきます。

だらだらと長く書いてしまった気がするので、読むのがだるくなったら最後のほうだけ読むとよいかもしれないです。

どういう仕事してるの

フリーランスのソフトウェアエンジニアです。 今は週4,5日で、業務委託としてWebサービス開発のお手伝いをしています。今は1社から継続して仕事の話を頂けてます。感謝。

開発は、KotlinとJavaAndroidアプリ開発、たまにRubyでツールを書いたりする感じです。 ほとんどAndroidアプリ開発やってます。

なぜリモートワークをやっているのか

プライベートな時間を少しでも多く確保したいというのが一番の理由です。よくある理由だとは思います。

フリーランスになるまでは、リモートワークは体調不良で仕方なくやるとき以外はほぼやったことがなかったのですが、実際にやってみると通勤疲れがなくなったり、プライベートの時間が増えたりと自分にとってはよいことが多いなと感じました。

個人的な話ですが、慢性的に寝つきが悪く朝に弱いということもあり、朝の時間にゆとりができると気持ちが非常に楽になります。

リモートワークは週1で

タイトルにも書いているのですが、現在は週1でのみリモートワークをして、あとは普通に出社して仕事をしています。 自身の能力や仕事をしている環境などを総合的にみて、仕事もそれなりに効率よくすすめられてかつ、プライベートな時間の確保もそれなりにできるのがこの頻度かなと考えてます。

私の仕事の立ち回りとしては、単純に開発するだけではなく仕様やスケジュール調整・技術選定・稀にプロジェクトマネジメントっぽいこともやったり等、結構人と話す頻度が多めです。

この場合、対話コストが高いリモートワークをやるより、出社して直接話したほうが断然仕事が進めやすいので、リモートワークはやるとしても少なめにしたほうがよいという結論になりました。 ちなみに、これは仕事を頂いている会社の人たちが毎日出社する前提での話なので、そうでない場合はまた変わるのかなと思ってます。

どこでリモートワークをしているのか

基本的には自宅でやっています。自宅は、コワーキングペース等と比べて作業環境を自分好みに整えてやすく、通勤する必要がないので朝の時間がいつもより多く確保できて楽です。 煮詰まったときは、ぶらっとカフェに行って軽く仕事する事はあります。

リモートワーク日にやっていること

仕事

開発着手可能な状態のタスクをあらかじめ用意しておいて、黙々とやっていることが多いです。事前に疑問点を洗い出して解消しておくと効率よく作業できるので、リモートワーク日を意識して手を回しておきます。

やっている仕事で例を挙げると、だいたい以下のような感じです。

  • 開発できる段階になったタスクの着手
  • 技術的負債への対応
  • バグの調査・解消
  • 開発ルールの整理など

リモートでやっているときは、作業の割り込み頻度が普段より少なくなるので、集中してやりたいタスクを優先的に持ってくるようにもしていたり。

話し合いで決めることが多い状況や、大きい機能のリリース間近の場合等は現場に出社しています。

仕事以外

休憩時間は、サッとご飯を食べて部屋の掃除や洗濯をしていることが多いです。

一人暮らしをしているため、帰宅が遅い日が続いたりすると騒音の問題で掃除や洗濯がやりづらく、結果的に週末にガッとやってしまいがちです。 そうなると、せっかくの休日も掃除の割合が増えてしまうのですが、リモートワークの日があると掃除のタイミングを分散しやすくなるので便利です。

荷物の受け取りもリモートワーク日に合わせていたりします。理由はだいたい掃除と同じで、なるべく休日の時間を空けられるようにしたいからです。 休日に受け取り日時の指定をして、2時間ぐらいの枠を占有されてしまうと行動範囲も狭くなりがちなので、できるなら平日にやっておきたいところ。

なお、基本的にはスケジュールが空いている時間帯に配達業者の方に来てもらうようにしているのですが、稀に緊急で入った打ち合わせと重なって非常につらくなることがあるのが注意です...

それは置いといて、1日でもリモートワークができると、休日にしかできなかったちょっとしたことを平日に回せるので非常に助かります。

その他、今はやってないですが、終業後に近場のジムにすぐ行くようにしていた時期もありました。終業後の時間にもゆとりが増えるので、できることも多少は増えます。

作業環境

こんな感じです。

f:id:djyugg:20191208202134j:plain

Androidアプリ開発をやっているので、端末を常にいくつか机に置いてます。 ディスプレイと机がお気に入りです。軽く紹介します。

ディスプレイ

PCとディスプレイをUSB Type-Cで繋ぐと、ディスプレイ側がUSB Type-Aのハブとして機能してくれるので、外付けキーボードを繋いだりして使っています。便利。

さらに、ディスプレイからPC側に電源供給ができます。Type-Cで繋ぐだけでこれらをやってくれるので配線が少なくなってかなり便利です。

デスク

www.nitori-net.jp 昇降デスクです。安く手に入るのがいい。

机が重いので組み立てが大変なことと、レバーを回さないと高さを調節できないのがちょっとめんどくさいですが、この値段で昇降デスクが手に入るのであれば許容範囲かなと思ってます。

あと、熱いものを直置きするとデスクの表面の加工が溶けるのかつるっつるになるので、そこは要注意。

スタンディングデスクとして使うとこんな感じです。

f:id:djyugg:20191208204105j:plain

体の貧弱さには自信があるため、腰痛防止や運動不足対策の1つとして導入してます。

財布が許す限り、作業環境を最適化していけるのが自宅のいいところですね。あとはビルドが早いPCが手にはいればもっといい感じになります。 フルスペックに近いMac miniが欲しい...

ざっくりまとめ

  • 週1でもリモートワークができると、プライベートの時間確保がよりできるようになる。
  • (環境、個人の能力によるが)人とやりとりすることが多い場合は、出社したほうが効率がよいかもしれない。
  • 朝が弱い人は、自宅で仕事ができるとストレスが結構減る。
  • 自宅環境は、財布が許す限り好きに最適化していける。最強の自宅環境を作っていこう。

KotlinのLT会!Kotlin入門者の集いに参加してきた

kotlin.connpass.com

6/26の勉強会なので今更のレポートですが。

最近、仕事でもkotlinを使いたいなーと思いながら、プライベートでほんの少しずつですがKotlinを書いていたりします。

とりあえず書いてみて、これでいいのかな?と思うことが多いので、コードを書く手がかりがつかめればと思いゆるーく参加してきました。

Googleが、AndroidでKotlin公式サポートを発表してからKotlinの勉強会が多く開催されているので、情報を集めやすくてありがたいですね。  

個人的に、参考になった発表内容をいくつか挙げてみます。


@KissyBntsさん

Kolin Modifiers // Speaker Deck

reified知らなかったです。 この発表を聞いたあとに見つけた、Kotlinエバンジェリストのたろうさんの記事も参考になりました。

Kotlin M10で追加されたreified type parameterがいい感じ - 算譜王におれはなる!!!!

目的としてはKotlinでJavaクラス(Classインスタンス)を得るための関数javaClassをもっと楽に使えるようにすることっぽい。

フレームワークを作ったりしなければあまり使い所がなさそうな気はしますが、スライドに出てきたActivity#findViewByIdでいちいちキャストせずに型推論で解決できるようになるというのは、Kotlinらしいコードに見えて結構いいなと思いました。


@neonankitiさん

ことりん入門

TODOという関数があるらしいです。 TODOコメントの代わりとして使えて、Android Studio側でもTODOとして検出できるとのこと。 また、TODO関数を実行すると例外を吐くらしいですね。

TODOタスクをソースに残す - 逆引きKotlin

インターフェースを決めたけど、これから実装する予定でかつそこの処理に入らないようになっている場合に使える感じですかね。 意図しない実装になっていないかを確認することに使えそう?

個人的に、TODOはスタブにしている箇所で差し替えを忘れないように使ったりする程度なのであまり使い道が想像できないですが、面白い機能だと思ったので使えるタイミングで使ってみようかなと思いました。


@tebasakyuさん

Kotlin + Javaで始めるAndroid開発 // Speaker Deck

JavaのプロジェクトでKotlinを使っていくというときに、KotlinのコードはJavaからどう見えるのか?という点を軸にKotlin導入のポイントがまとめられた発表でした。 既存プロジェクトに対してKotlinを使いたいなーと思っていたので、仕事でKotlinをがっつりやる前に見ることができてよかったです。

Kotlinは、書き方が多様なのである程度のルールは必要かなーとは感じていたのですが、Javaから参照する場合のことも含め考えていく必要があるなと思いました。


その他

Kotlinに関する情報のリンク集が話に上がっていました。 github.com

参加してみて

全体的にわかりやすい内容が多く、みなさんがKotlinの機能をどう考えて使っているのかをコードを含めて知ることができてとてもよかったです。

あと、たろうさんのエモい話が面白かったですw 参加して非常によかったなーと思える勉強会でした。  

ほぼAndroid初心者の私がDroidKaigi2016で学んだこと

droidkaigi.github.io

2/18,19の2日間、Android開発者のイベントであるDroidKaigiに参加してきました。

普段はWebアプリの開発が中心で、業務内でのAndroid開発はつい最近始めたばかり、プライベートではちょっとしたアプリ(WebのAPIをちょっと叩くやつとか)を作ったりした程度の知識だったのでどれだけ話についていけるか不安は大きかったのですが、結果的に初心者からのステップアップに役立ちそうな情報を多く手に入れることができました。
参加して本当によかったと思っています。

そんな、ほぼAndroid初心者の私から見てとても参考になったセッションの情報をいくつか挙げて簡単にまとめてみました。

Android Lintで正しさを学ぼう

www.slideshare.net

Android Lintを使うとAndroid開発でのアンチパターンや凡ミスを検出できるので、品質の指標にもなるし積極的に使っていこうといった内容でした。

スライドの中で紹介されていた事例は、初学者がやりがちな凡ミスが半分ぐらいだったり、知らないとやらかしそうだと思えるものが多くありました。

お作法的なところを調べるのは結構時間かかったり見落としたりしがちなので、Android初心者はlintしながら開発すればAndroidの学習速度も早くなりそうです。 簡単に利用できるので、積極的に使っていこうと思います。

2日目基調講演 第1部「Support Libraryノススメ」 第2部「Support Library Internal」

サポートライブラリ DroidKaigi 2016
※リンクを貼っておいてアレですが、私の環境ではうまく動いてくれずスライドの内容が確認できませんでした。。。

Support Libraryは基本的にAndroid SDK後方互換性を保つものということから、Material Designの実装が容易にできる補助的な機能も提供しているという紹介をしている内容のセッションでした。
compileSdkVersionとライブラリでメジャーバージョンは一致させる必要があるというお作法的な話から、各ライブラリごとに提供している機能の説明を聞けて、今後の利用の参考になりました。

他のセッションで聞いた内容も考慮すると、特別な理由がない限りは基本的にSupport Libraryを使った実装を行うのがよさそうだと思いました。

パフォーマンスを追求したAndroidアプリを作るには

speakerdeck.com

いくつかの観点を挙げ、それらに対して比較的簡単に実施できるパフォーマンス計測方法と改善についての情報がまとまっているセッションでした。

パフォーマンスに関するものは必ずどこかでぶつかる問題ですし、そういったところに早期から目が行くようになれば初心者がやりがちなまずい実装を避けることができそうです。

また、簡単に計測できる方法というのが非常に良いと思います。 めんどくさいというだけでやらない理由としては十分ですからね。。。

Android Dev Tools Knowledge

www.slideshare.net

Android開発における便利ツールAndroid Studioプラグインの紹介のセッションでした。
Android Studioプラグイン、たくさんあることは知っていましたがPostfix CompletionやAndroidWiFiADBぐらいしか詳細を把握していなかったので、こういう形でまとめていただけるのはほんとにありがたいです。
デバッグ関連のツールも結構紹介されているので、このあたりの情報を使って開発に慣れていこうと思います。

他にも学んだことはありますが、雑なまとめとしては以下のような感じですね。

  • コード書いたらAndroid Lintする。これだけで解決できることは多い。
  • 基本的にはSupport Libraryを使った実装にする。
  • ある程度簡単にパフォーマンス計測できる方法があるので、継続して計測し改善に努めよう。
  • めんどくさい作業を効率化するツールはたくさんあるので、有効活用するべき。

…理解しきれなかったものもそれなりにあったので、しばらくは開発して慣れてからスライドを再度見てみようと思います。

第3回かわいいKotlin勉強会に参加しました

kotlin.doorkeeper.jp

DroidKaigiでのたろうさん(@ngsw_taro)の発表でこの勉強会の存在を知り、参加してきました。

発表者の方のスライドは主催のたろうさんがブログでまとめてくれています。
ありがたい!!

taro.hatenablog.jp

参加してみて

発表された内容はどれも個性があり、参考になるものばかりでした。
仕事で会場に到着するのが少し遅れてしまったため、たろうさんの発表をdataアノテーションのあたりから聞くことになってしまったのがかなり残念でしたが、Java→Kotlinの変換やAltJSとしてのKotlinなど特に気になっていた部分の発表を聞くことができてよかったです。

また、参加者の方はAndroidな方々が多かったようです。
よく言われる、AndroidがJava8に対応していないが、kotlinならラムダ式が使える~あたりがメリットとして大きいのでしょうかね。

ちなみに、私は仕事では主にPHPJavaのWebアプリケーションの対応をしており、Androidにはあまり縁がなかったりします。
個人的にAndroidの開発はやってみたいので、今年中にはkotlinでアプリを書いてplayストアに載せるところまでやりたいですね。

懇親会にも出てみましたが、新しめの言語の勉強会ということもあってか、参加されてる皆さんの実力の高さが垣間見えました。
特に、発表者の方々は個性が強かった印象があります。
よい刺激を受けることができた勉強会でした。

Kindleセールで買った技術書やらを並べてみた(雑記)

www.amazon.co.jp

現在(5/31)、Kindleでポイント還元セールをやっているようです。
しかも、ほとんどのKindle本が対象のようです。
欲しい本や気になっていた本がいろいろとあったので、一気に購入して3万円ほど出費してしまいました。

今回みたいに、セール対象が広い場合は皆何を買うんだろう?と疑問に思ったので、 とりあえず自分が購入したものを公開してみることにしました。

こんな本あるんだーといった感じで参考になればいいかなと思ってます。

言語関連

AWK実践入門 (Software Design plus)

AWK実践入門 (Software Design plus)

シェルプログラミング実用テクニック (Software Design plus)

シェルプログラミング実用テクニック (Software Design plus)

業務でちょいちょいawkシェルスクリプトを使うことがあるのですが、 とても便利なのでもっと勉強したいと思い購入。
シェル芸もまだまだうまくできないので、これ読んでシェル芸人として成長したいですね。

Effective Ruby

Effective Ruby

Rubyは学生の頃にちょっとかじった程度なので、それなりに書けるようになりたいですね。

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

自分の中でのJavaは6で止まっているので、6以降のJavaを覚えたいと思い買いました。

Webフロントエンド関連

Web Designing 2015年3月号 [雑誌]

Web Designing 2015年3月号 [雑誌]

Web Designing 2015年6月号 [雑誌]

Web Designing 2015年6月号 [雑誌]

Webフロントエンドをそれなりにできるようになりたいので購入。 今はほんとだめなんで…

その他

システムテスト自動化 標準ガイド CodeZine BOOKS

システムテスト自動化 標準ガイド CodeZine BOOKS

その数式、プログラムできますか?

その数式、プログラムできますか?

いろいろ覚えたいことはあります。

その他(デザイン全般)

伝わるデザインの基本 よい資料を作るためのレイアウトのルール

伝わるデザインの基本 よい資料を作るためのレイアウトのルール

たのしいインフォグラフィック入門

たのしいインフォグラフィック入門

デザイン関連は、仕事にかなり応用が効くと思っています。
それだけでなく、私生活にも取り入れることができるので、ものにできればかなり役立つと思ってます。
早いうちに身につけておきたいですね。


Webやモバイル(Androidあたり)アプリ開発・デザインに興味があるので、よさげな本が他にあれば教えていただけるとありがたいです。

応募期間終了したけどパイザオンラインハッカソン5をPHPでやってみた

今回はレナルートでやってみました。
こっちのほうが気持ち難しめかも?

1問目解答

2問目解答

3問目解答 gist.github.com

PHP5.5使ったことなかったんで少し調べながらやっていたのですが、ジェネレータ便利っすね… メソッドをジェネレータとして定義するときは、メソッド名をgenerateから始めるとかジェネレーターだと一目でわかるようなネーミングしたほうがいいかもしれないですね。

そして、まったく関係ないのですがIntelliJのGist作成機能を初めて使ってみたらこれがまた便利。 なぜ今まで使わなかったんだ…

ちょっと試したコードをGistに上げるのには最適ですね。積極的に使っていこう。

パイザオンラインハッカソン5をJavaScriptでやってみた

paiza.jp

タイトルの通りです。
とりあえず幼馴染ルートでやってみました。
ルートによって4問目の内容が変わるんですかね?

1問目

gist.github.com

2問目

gist.github.com

3問目は省略

4問目

gist.github.com

感想

Node.jsというかJavaScript自体は、それなりに書くようになったのは半年前ぐらいだったりします。

今回どれだけ書けるかやってみたのですが、普段ライブラリ(lodashとか)を利用して書いてる箇所をライブラリなしで綺麗に書くにはどうすればいいか悩んだりすることがいくつかあり、言語の習得(特にES5の仕様)がうまくできてないと感じました。

結果的に、JavsScriptの言語仕様・APIをおさらいするよい機会になりました。
また、こういう競技プログラミング的なもの?は別言語の新規習得にも使えるのではないかと感じました。

問題自体は前回のPOHよりは簡単な感じがしました。
4問目はもっときれいに書けるんだろうなあとは思っています…

あとで、別言語でもやってみる予定です。