2019年12月25日水曜日

転職と振り返り

これは琉大 Advent Calendar 2019 23日目の記事です。

前回はこちら
次回はこちら

まとまりはないのですが、その時は質問していただけたらと思います。

転職しました


新卒で入った会社は1年半でやめる形になりました。
その会社は全国・世界にも支社のある10万人規模のいわゆるSIerでした。
そこでは会社としても珍しいモバイルアプリを開発していました。
Mac Book Proもありましたし、プロキシのないインターネットにも繋がれました。

辞めた理由


やめたのは様々な理由がありますが、最も大きい理由は
「自分自身が思い描くキャリアがこの会社では歩めない」
と思ったからです。

「あれ?じゃあなんでその会社に入ったの?」と思うかもしれません。
僕もそう思いますし、最初からキャリアを思い描けていたらと思います。
いろいろ開き直りますが、それって難しくないですか?
だって、バイトと学会くらいですよ?働いたのは。

最初からキャリアを描けた人は本当にすごいと思うし、尊敬します。
だって、大学からやりたいことがあって、それを実現しようと思っているのだから。
僕にはそれがなかった。ただそれだけ。

働き始めたら、その会社でやりたいことが生まれるかな、などと考えていました。
確かに生まれました。でもそれはこの会社でやるには5年はかかりそうだと思いました。
だからできそうな会社に転職しました。

ふりかえり


新社会人になる前に、ある人からアドバイスをいただきました。
「新卒でいい会社を引き当てるのは難しいのだから、そこまで気負わなくていい」
(本当にこうだったかは忘れましたが、多分こんな感じだったはず)
今でもこれは本当だと思うし、少なくとも最近はこうなんだろうと思います。

会社の人事や教育担当の方には本当に申し訳ないと思いました。
採用の大変さは1mmくらいは理解しているつもりです。お金もかかります。
実際、転職してから採用に関わることがあったので、最低でも書類選考の大変さは知っていますが、ただ、人が辞めてしまうのはどうしようもないことだろうと思います。
いい会社でも人は辞めますし。

辞める前にもっといろいろできたかも、と思いました。
いろいろな人と話して、働きやすくアクションを起こしやすい職場にしたほうがよかったと思いました。
イベント提案したり、社外勉強会のレポートをチームに送ったりはしましたが、そうではなく、実際に勇気出して話してみる方がよかったと思いました。
まぁ、僕は1度やって折れちゃったんですけどね...。もっと信頼貯金と熱意が必要だった。

これから


アジャイル開発とモダンな開発環境に触れる会社になったので、当面は技術を身につけながら、実装速度をあげたいと思います。

補遺

できるだけ辞めたくなかったなぁとは思います。
いい人が多かったし、すごくできる同僚にも恵まれた。
linuxをカーネルを読む人がいたり、コンパイラ組んでる人もいました。
論文出したり、特許出したり。

同期が周りにいない職場だったので、勝手に社内チャットを作ったりして、知っている同期をバンバン招待しました。
チャットはクローズしましたが、その時のコミュニティはまだあるみたいです。作ってよかった。

2019年12月22日日曜日

Flutter for Webで簡単なToDoリストを作るぞ

この記事はFlutter #2 Advent Calendar 2019の21日目です。

前回はこちら
次回はこちら

1日遅れてすいません。しかも解説は追記予定です。
ソースコードだけは置くので参考になれば幸いです。

(追記2020/2/16)
githubにプロジェクトコードを置きました。
Firebaseでデモを置きました。




最近Dartを使っているので、Flutterを再び勉強するモチベーションが出てまいりました。Flutterは以前少しだけ触って放置していたので、改めてキャッチアップしてみると、なんとFlutter for Webというのがあったので興味本位で触ってみることにしました。

そういうわけでFlutter for Webで簡単なTodoリストを作ります。

やること


開発するときにみた情報源の話。作り始めのころの雰囲気を記録したいと思います。なので読みにくい点もあると思いますが、その時はもし良ければ「読みにくい」ってコメントをお願いします🙇‍♂️

やらないこと


設計周りの話はしません。今はクリーンなアーキテクチャよりもプログラミングを楽しむことに価値を置きたいと思います。

どういうのを作るのか


仕様を決めます。

  • ユーザーはタスクリストを見ることができる。
  • ユーザーはタスク名を入力し、タスクリストに追加できる。
  • ユーザーはタスクリストから終わったタスクをワンクリックで消すことができる。
  • ユーザーはタスクリストに書いたタスクを次回も見ることができる。

足りなければ追加するということで、とりあえずこれで行きます。
あとは画面のモックを作っておきます。
ハイクオリティな画面モック
では取り掛かっていきます。

環境構築


公式の方法に従って導入します。
現在はbetaチャンネルなので今後stableに変わると思います。

というわけでプロジェクトを作ります。

flutter create --org com.akior todolist_app
cd todolist_app
code .

VSCodeであらかじめ設定しておけばこれでプロジェクトで開けるはずです。
あと、VSCodeはFlutterの拡張設定は必要です。

flutter run -d chrome

これでweb画面が起動します。
ちなみにVSCodeからも起動できます。

Touch Barの実行ボタンでも起動できます。白い三角が実行、中抜き三角がデバッグ実行。
lib/main.dartを編集していきます。

完成


タスクを追加する処理です。
ユーザーはタスク名を入力し、タスクリストに追加できる


タスクを削除する処理です。
ユーザーはタスクリストから終わったタスクをワンクリックで消すことができる


更新しても画面は保持されたままです。
ユーザーはタスクリストに書いたタスクを次回も見ることができる

ここにソースコードを示します。



解説

使ったのはAnimatedListWebStorageです。
アプリならSharedPreferencesを使うところですが、WebなのでWebStorageを使うことができました。使うにはdart:htmlをインポートする必要があります。

おわりに


Flutter for Webで簡単なToDo リストを作成しました🎉
Flutterのお作法で悩みながら楽しく作れたと思います。Widgetツリーを意識しながら構造的に書くことは勉強になりました。

課題として、

  • ネットワークの要素を取り入れる(Firebaseなどと通信する)
  • PWAのように使えるのか調査する(hi fiveみたいにキャッシュにためたあと通信する機構など)
  • オリジナルのデザインをつかう

があげられそうです。

余談


最初にFlutter for Webを書き始めたときは12月始めで、そのときはdevチャンネルでした。
なので12日のFlutter Interactでbetaチャンネルに移行したときは飲み会で一芸を楽しみにしてる感じの声が出ました。
Flutterにsearch.array().






2019年9月8日日曜日

TDD+モブプログラミング会に参加してきた(5回目)

今日はTDD+モブプログラミングでワイワイする会 その28に参加してきました。

記録によると約1年前に初めて行き、今回で通算5回行っていることになってます。



社内でも宣伝して、いろんな人を誘って参加しています。
大学の同期だったり、会社の同期だったり。
僕は誰かと一緒に良いものを分かち合いたいという欲求があるみたいです。

今回は「社外の勉強会に参加するのはハードルが高い」というので、@yu12co_mと一緒に行きました。
台風接近という最高の天気ではありましたが、時間の都合で1モブです。

ClojureでFizzBuzz


4名でFizzBuzzを実装しました。もちろんテスト駆動開発で。
選ばれた言語はClojure + Clojure.testなんですが、全員初めて使うというのと関数型というので難易度高めでした。

途中、Core.Matchという模範解答を見つけてしまったので薄目で見ながら実装してました。ただ、使うにはdependencyを書く必要があったのですが、うまく導入できず使いませんでした。まあそんなことせずにforとかifとか使えば手続きっぽく書けそう。

感想としては、
  • Matcherにareが使えてパラメタライズドなテストが書きやすい
  • 出力テストはwith-out-stdみたいなキャプチャがあってやりやすい
  • 関数型チックな書き方がまだしっくりきていない
  • モブじゃなかったら心が折れてた
という感じです。
やはり新しい言語をやるにはモブプログラミングが楽しいですね。

写真は今回使ったプロジェクターです。いろいろ試行錯誤しました。

天井吊なので逆さにしないと使えないというアレ


2019年6月8日土曜日

Android Studioでオフライン時にビルド失敗した

新幹線でAndroidアプリをビルドしたら次のエラーが出た。


Unknown host 'dl.google.com: nodename nor servname provided, or not known'. You may need to adjust the proxy settings in Gradle.
Enable Gradle 'offline mode' and sync project
Learn about configuring HTTP proxies in Gradle


言われている通りGradleをoffline modeにするか。
`Enable Gradle 'offline mode' and sync project`を押してしばらく待つ。
そして再ビルド。

No cached version of io.realm:realm-annotations-processor:5.11.0 available for offline mode.
Disable Gradle 'offline mode' and sync project

え〜。

すると秀策さん(@shumach217)からリプがきた。




というわけで調べてみた。
stack overflowにはこういう記事がある。

The Offline mode does not allow you to completely work offline. Its actually a GOOD cache mode. Whenever you add new dependencies, You HAVE to gradle sync the project, ATLEAST ONCE. Android studio has to download(then cache) the dependencies for the app to work. Once you sync the gradle files, then you can switch to offline mode, and you can work.
オフラインモードで完全に作業することはできません。モジュールを追加した場合、少なくとも1回は依存関係解決のためにgradle syncする必要があります。Android studioはモジュールの依存関係解決のためにダウンロードする必要があり、ダウンロードしたらキャッシュされます。一度Syncしたら、オフラインモードでも動くでしょう。

なるほど。
でも、モジュールを追加したらSyncしたんだけどな。
ビルド時に依存関係を解決しているのかな?

そんなわけで、1度ネットワークに繋いでビルドしました。
その後はオフラインでもオンラインでも動いています。


2019年4月7日日曜日

Flutter入門でiOSとAndroidにアプリをビルドした

Flutterに入門することにしました。

Flutter(フラッター)は、Googleによって開発されたフリーかつオープンソースモバイルアプリケーションフレームワークである。FlutterはAndroidiOS向けのアプリケーションの開発に利用されている。Fuchsiaではアプリケーションの開発は主にFlutterを利用して行われている[4]
2018年12月4日、ロンドンで開催されたFlutter Live '18にて、初の正式版となるFlutter 1.0のリリースが発表された[5]

iOSアプリにするためにはXcodeが必須なので開発機はMacがいいと思います。

セットアップ


Flutterの公式がよくできてるのでスムーズに行くと思います。とはいえ英語なので、Flutterの日本語本もあります。僕は本を使いました。

技術書典にも本が頒布されていますので、Amazonやhontoなどで購入してみるのも手です。



Flutter情報のキャッチアップ


flutter公式Twitterがあります。2週間ごとに更新があるようです。

東京ではFlutter Meetupという勉強会もあります。Twitterもあります。

Flutterの学習


monoさんという方がいくつか方法を示しています。

僕は本 -> 公式チュートリアル -> Udacity、という順番で計画しています。
その後は自分の好きなものを作るようにしようかと。

所感・つまづき


iOSのビルドに慣れなかったので小一時間ひっかかりました。

本にはFeedParserを使えとありましたが、もうないようです。
その代わりにWebFeed使えるようです。
ソースコードにも変更があるので一部載せます。

  void getItem() async {
    Response res = await get(item.link);
    print(item.link);
    dom.Document doc = dom.Document.html(res.body);
    dom.Element hbody = doc.querySelector('.tpcNews_summary');
    dom.Element htitle = doc.querySelector('.tpcNews_title');
    dom.Element newslink = doc.querySelector('.tpcNews_detailLink a');

Yahoo!側のHTMLに変更があるので、合わせてあげるとうまく行きます。

ソースコードは括弧が多いのが気になります。IDEでも気になります。頑張れば減らせるかもしれませんが。

個人開発や小規模な開発ならFlutterが良さそうだと思います。
次期OSのメイン言語になりそうなので今後も期待できそうです。

2019年3月12日火曜日

モビングを言語化する -「モブプログラミング・ベストプラクティス」を読んで


重要なことを先に書くと


モブがやりたい・広めたいなら「モブプログラミング・ベストプラクティス」を読もう。


きっかけ


モブプログラミングを初めてやったのは2018年の5月ごろだったらしい。その時の記憶はもうあまりないけど、けん玉を一生懸命やっている記事だけは残っていました。

あれからもう3回、TDDyyX(カイ)に行ってモブプロとTDDの筋トレを行っています。

あまりに楽しいので、社内で有志を集めてモブプロ会を行ってみました(たぶん今後ブログにポストします)。社内の研修でも参加者をそそのかして行ったこともあります。

ただ、残念ながら僕は仕事でモブプロができていません。モブプロで解決できる問題は溜まっているはずですが、実際にやるにはカタのインストールに時間がかかるし、そのコストをペイできるか分からないからです。

今からどうやって職場で広めていこうか、という時に出会った本が「モブプログラミング・ベストプラクティス」です。

読後感


僕はモブプロを他人に説明する時にうまく話せたことがありません。

なぜモブなのか、なぜ心理的安全性が重要なのか、心理的安全性とは何か、効率的なのか。よく質問にあがりますが、自分の中で言語化できていないためよく話せていませんでした。

そういった疑問を解決し言語化してくれているのがこの本です。
僕はこの本を脇に置きながら友人たちとモブの実験をしていこうと思います。

P.S.


そういえば、この本には「心理的安全性」という言葉はでていなかったような...。
どこが出典なんだろう?