Vapor Trail

明るく楽しく元気よく

CapacitorかReact Nativeかクロスプラットフォームの選定に悩む

受託開発の仕事をしていると一般ユーザ向けのスマホアプリの開発でAndroidiOSの両方とも使用できるようにして欲しいという依頼が多い(業務用の場合はAndroid Onlyだけにして楽することもある)。

基本的に別々にネイティブアプリを作るという選択肢は無いが理由としては、

  • 小さい会社なので人手が足りない。
  • 予算がない。
  • 当然?納期が短い。
  • Kotlin、SwiftもしくはJavaObjective-Cの技術の知見がない。

といったことが挙げられる。

そうなるとWebの知識でスマホアプリを作ることができるハイブリッドアプリで作ろうということになるが、どのフレームワークで開発するのか悩んだ。

Capacitor(Ionic)

Cordovaの後継のCapacitorというプロジェクト。
自分はCordovaで作られたアプリ(バックエンドも含めて)の保守・運用を担当しているからとっつきやすそう。
Cordovaがつらい話はこちらが詳しいが個人的につらかったのは

  • LiveReloadに対応していないので開発しづらい。
  • webpackが使えない。
  • 結局ネイティブ層に手を入れている(当時はプラグインがなかったので自作したっぽい)。

今やCordovaの名前を殆ど聞かなくなってしまったが2016~17年の時点ではまぁベストな選択肢だったと思う。

「Cordovaつらい」を経験した自分としてはLiveReloadに対応しているのがアツい。
Ionic=AngularなイメージだったがReact・Vue.jsにも対応している。
ドキュメントがちゃんと日本語化されているのもポイント高い。

Capacitor: Webアプリのためのネイティブなクロスプラットフォームライブラリ
Ionic Framework - Ionic Framework 日本語ドキュメンテーション

ネット上でCapacitorやIonicを使用しているということを目にすることが少ないしまわりでも採用例を聞いたことがないのは懸念点。初めて知ったがクラスメソッドのカフェアプリはCapacitorを採用していた

ExpoもしくはReact Native

海外の有名企業で採用されている。TwitterなどでReact Nativeの名前をよく見るしまわりでもReact Nativeの採用例を聞く。
基本的なSDKが一通り揃ったExpoという開発ツールがあり開発体験が良い。ただしネイティブ層に手を入れることができないので要求される機能が実装可能かどうかよく検討したほうがよい。

懸念点としてReact Nativeのバージョンがいまだに0.63で3ヶ月ごとに大きな変更がある。
それにあわせてExpoも更新されるのでアップデートに追従するのがつらそう。 特にExpoのドキュメントがv35.0.0までしか表示されておらず、v34.0.0がリリースされたのが2019年6月なので1年経たたずにドキュメントが見れなくなくなるっぽい(どこかにあるのかもしれないけど)。

Expo maintains ~6 months of backwards compatibility. Once an SDK version has been deprecated, you will no longer be able to use the Expo client for development or build new binaries via expo build.
https://docs.expo.io/workflow/upgrading-expo-sdk-walkthrough/
Expo は ~6ヶ月間の後方互換性を維持しています。SDKのバージョンが非推奨になると、expo buildコマンドで新しいバイナリをビルドしたりExpoクライアントを開発に使用したりすることができなくなります。

アップデートに追従していく覚悟があるか。
開発が終了してポツポツと機能追加や変更があるような受託開発で採用すると保守がつらそう。

参考:2020 年の React Native 開発 - tomoima525's blog

Flutter

Dart言語なので自分以外のメンバーが保守・開発に参加することがより難しくなるので見送り。

別の問題

総合的に考えるとWebViewで十分な要求なのでCapacitorを採用することがプロジェクトにとっても会社にとっても良さそうなのだが、自分個人としてみるとその選択が果たして最良なのかという問題が出てくる。 エンジニアとして自分のスキルセットを考えたときにReact Nativeのスキルを身につけたほうが市場価値が上がり転職しやすいのではとか考えたりする。CapacitorとIonicの知名度が低いので職務経歴書が採用企業に引っかからない可能性がある。GreenやIndeedで検索してもReact Nativeのほうが求人多いし、今の時代なんでも即戦力求められるから経験ないとそもそも雇ってくれないし。基本的に「やりたいから」って理由で技術選択することは後でケツ拭く人のこと考えると好きじゃないけどどうするべきか。

『星野リゾートの教科書』を自分に当てはめて読んだ

本書は企業経営の話だが、個人的に転職を考えている自分にとって個人の転職市場での戦略を考える上で役立つと感じた。企業ではなく個人に当てはめて考えたことをまとめる。

なぜ教科書を読むのか

教科書はビジネススクールで数多の企業を研究し法則化され体系的に理論化された科学いわば定石が書かれている。
経営判断の根拠や基準となる理論があれば行動のブレも少なくなる。
企業経営は経営者個人の資質に基づく「アート」の部分と論理に基づく「サイエンス」の部分がある。
アートはいわゆるカリスマ経営者のような直感的なやり方。
サイエンスを基にすることで自分の下した決断に自身が持てるようになり社員に対して判断の理由を明快に説明できる。

教科書の選び方

自分の会社が置かれている状況や自分の悩みに対するフィット感があれば教科書として役立つ。
ピンとこない場合は本がテーマとして扱っている課題が自社の課題と合致しないとき。

読み方

読むべき本が決まったら理解できるまで何度でも読む

「自社にどのように当てはめれば良いのか」「どこを変える必要があるのか」と考えながら読む。
自社の具体的な悩みを考えながら読んでいると、頭の中が次第に整理されていき、やがて打つべき対策が見えてくる。
読みながらそこにアイデアを書き、教科書から離れるときには、本に書かれた自分のアイデアをパソコンで一気に書き込んでいく。

つまみ食いしないで忠実に実践する

教科書通りの戦略を実行してもなかなか成果が出ないときもある。
そういうときは教科書の戦略を1つずつ確認しなぜ成果が出ないのかしっかり考える。

感想

  • 転職について考えたこと
    自分は凡人なので新卒で有名企業に入るような人のキャリアは参考にならない。
    また有名企業での職務経験もないため自分のスキルを客観的に評価されにくい。
    そのため戦略的に転職活動を進める必要がある。

  • 教科書の読み方について
    以前から技術書を読むことについて「技術書を読むこと」と「読んで理解すること」と「読んで理解して実践してみること」の2つ間には大きな隔たりがあると思っていて、1回通読しても表面的にわかった気になっているだけで何回も読んで自分のモノにすることが大事。
    参考:https://note.com/erukiti/n/nfe26d674842a

競争の戦略

これといった特徴がない企業の戦略について。

狙いを絞る

ターゲットを絞ることで運営が効率化されコストも下がる。
競合の動向を見極め競争から抜け出す戦略を取る必要がある。

ライバルとの競争で取るべき戦略

  • コストリーダーシップ コスト競争力で優位に経つ
  • 差別化 競争相手との違いを全面に出す
  • 集中 特定の領域に自社の経営資源を集める

感想

転職市場での自分の競争戦略を考えたときに、コストで競争して自分を安売りしても不幸にしかならないのでそもそも「コストリーダーシップ」は論外。となると「差別化」と「集中」しかない。知名度が高いエンジニアの人を見ると特定のスキルに「集中」して、かつアウトプットして「差別化」するっていう戦略に当てはまっている人が多い気がする。
前々から気付いてはいたが「これなら他の人に負けない」という自分の得意なスキル、ここで言われているターゲットを絞る必要があるなと感じる。時間が経っても陳腐化しない自分のベースとなるスキルを身に着けたいが、結局「コレだ!」と思うものは見つけられないでいる。
流行に流されてVue.jsに手を出してみたりReactに手を出してみたり色々素振りをしているが、個人でちょこっとやってみました程度じゃ日々業務で使ってる人に及ばないので、大したアピールにならないという問題。
しかも1万人にも満たない規模のアプリしか作ったことがない地方で働く自分が技術力で勝負するのはキツイなとも感じる。

コモディティ化した市場で勝つ

コモディティ化=サービスや製品の品質による差別化が難しくなること。
サービス水準が上がってきたため一流ホテルとの大きな違いがなくなってきた。

製品やサービスの質に差がなくなったとき、お客様は買いやすい会社、手間をかけずに安全に早くほしいものが手に入る会社を選ぶ。アクセスを高めることで他社に差をつけて勝つ。

アクセスを高める3段階

  1. スピーディに買うことができるサービス・情報を提供する。
  2. ボタン1つで買えるなど使い勝手よくアクセスできるようにする。
  3. 「今こういうものを買ってはいかがですか」など提案をする。

星野リゾートの情報システムについてはこのスライドが詳しい。
https://www.slideshare.net/ssuser91c7c7/devops-176765846

感想

大したスキルも経験もないので転職市場で埋もれてしまっていてコモディティ化してしまっているなと読みながら感じた。
結局、自分のことを知れる情報をアウトプットしておいて、少しずつ差別化していく多くの人の目に留まりやすくしておくことが得策なのかなと感じた。

全然関係ないがウメハラが言ってたうまいラーメン屋の見分け方の話を思い出した。
「外観がきれいな店はラーメンがうまい。見た目に気を使えないような店がラーメンの味に気を使えるわけがないじゃん。ただ最近はどのラーメン屋も見た目がちゃんとしてるから見分けがつかない。」と言っていたことを思い出して、コモディティ化なるほどなと思った。

サービスの100%保証システム

製造業では一般的な保証がサービス業には殆ど無い。
機械よりも不確かな人間が提供するサービスこそ保証が重要という考え方。
サービスが約束通りに提供されることを保証するサービス保証が有効なときはサービス内容が不確かなとき。すでにサービス内容に定評があるときはサービス保証は機能しない。

感想

就職したときにある約3~6ヶ月間の試用期間はサービス保証システムそのものだなと思う。

『小さなチーム、大きな仕事 働き方の新しいスタンダード』を読んだ

著者はRailsの開発者のDHH、Basecampの創業者のジェイソン・フリード。

 

きっかけ 

1:10の確率で1億円のビジネスを作ろう。遠い昔には1億円は大金だった時代があった。(会場、笑)僕は、今でも1億円は大金だと思う。でもここに来てるようなVCたちはみんな1000億円とか300億円クラスの会社の話しかしない。

 

2,000人の顧客に毎月4,000円課金する継続課金サービスで12ヶ月、これをかけ算すると年間1億円になるね! 

 www.turnyourideasintoreality.com

 

DHHは以前から知っていましたが、この記事で話されている内容が非常に地に足がついている考え方で興味を持ったので読むことにしました。

 

ビジネスを無理に拡大しない

IT系のスタートアップというとGoogleFacebookNetflixを目指してどんどん人を雇って立派なオフィスにしてとビジネスをスケールしていくイメージがありますが、Basecampを知ると堅実に無理に会社を拡大しないというやり方もあることがわかります。

彼らはフォーチュン500に売り込む必要があるという。知ったことか。僕たちはフォーチュン5000000に売っているのだ。

DHHは会社の規模に関係なく持続的で利益の出るビジネスをしていれば誇るべきことなのだと言っています。コロナウィルスの影響によってIT企業ではリモートワークがデフォルトになりつつある今では、固定費は頭痛のタネとなりつつありますし。

小さな企業はもっと大きければと願っているのに、大企業は身軽であることを夢見ていることに気づいているだろうか?

自分が作っているモノに愛着を持つ

大きな仕事をするには、何かを良くしているという感覚が必要だ。世界にささやかに貢献している、あなたは重要なものの一部である、という感覚だ。これはガンの治療法を発見しなければいけないという意味ではない。自分の努力に価値があると感じる必要があるということだ。顧客に「私の人生を良くしてくれた」と言ってもらいたいはずだ。していることをやめたら、みんなに気づいてほしいはずだ。

最近仕事がつまらないと感じるのはなぜなのだろうかと考えることがあり、自分の作っているものが誰の役に立っているのか実感が持てないからだと気づきました。自分の作っているモノがなにかを良くしているという感覚って大事だなと、逆にその感覚がない場合作業でしかないのです。

すごい製品やサービスを生み出す最も単純な方法は、あなたが使いたいものを作ることだ。自分の知っているものをデザインするのなら、作っているものがいいかどうかすぐに判断がつく。

ビジネスを立ち上げるなら、その核は変わらないものであるべきだ。人々が今日欲しいと思う、そして一〇年後も欲しいと思うもの。そうしたものにこそ力を投入すべきだ。

SES・受託開発よりも自社開発のほうが人気な理由って、結局自分が作っているモノがダイレクトに人の役に立っているという感覚を得やすいからな気がします。もちろん待遇が良いとか理不尽なことが少ないという理由のほうが遥かに大きいとは思いますが。

よくサービス業の求人とかで「お客様の笑顔がやりがいです」「お客様のありがとうがやりがいです」などと書いてあったりしていて今までは嘘くさいな、綺麗事だなと思っていたけど、結構真理なのもしれない。

やりたいことがあるのなら言葉ではなく行動で示す

 これは自分自身でも耳が痛いのですが、「やりたい」「興味がある」けど「時間がない」という人は、本当はやりたくないのです。

 一番多い言い訳は「時間がない」だ。会社を立ち上げたい、楽器を学びたい、発明を売り込みたい、本を書きたい、しかし十分な時間がない、と人は言う。そんなわけはない。正しく使えば時間はあるものだ。仕事をやめなければと考える必要もない。普段の仕事をしながら、夜中にプロジェクトをスタートさせればいい。

始めてみればその興味が本当なのか、それとも言ってみただけだったのかすぐわかる、続くのであればその興味が本物で、続かないのであれば合わなかったのだなと知ることができます。

 

経営について

外部の資金を調達するということは自分たちのコントロールを失うということ。

 

やることを減らす

失敗するレストランのメニューにはあまりに多くの品が載っている。自分のコアを見つけてそれに注力する。

 

考えグセを無くす

一時間かかる会議を設定し、参加者を一〇人召集したとしよう。これは実際には一時間の会議ではなく一〇時間の会議である。一時間の会議の時間と一〇時間ぶんの生産力を交換しているのだ。

 

できるだけ「これについて考えよう」ではなく「これについて決断を下そう」と思うことだ。決断する姿勢を持つことだ。完璧な解決を待たず、決断して前進するのだ。