nunulkのプログラミング徒然日記

毎日暇なのでプログラミングの話題について書きたいことがあれば書いていきます。

フリーランスソフトウェアエンジニアの生存戦略について

はじめに

この記事について

とあるイベントで表題の件で話をしてくれっていう依頼があったので、これまでの自分のフリーランスソフトウェアエンジニアとしてのキャリアを振り返りつつまとめてみました。

個人的な考え方(基準とか)が大部分で、生存者バイアス的なものもあるかもしれませんが、同時に、他の人にも通用する(当てはまる)部分もあるんじゃないかと思うのでフリーランスやってみたいけど不安に感じてる方とか、フリーランスになってみたもののうまくいってない方とかの参考になれば幸いです。

自分は長らくウェブアプリケーションエンジニアとして生きているのでおおむねそっち方面に偏っていると思いますが、昔はハードウェアに近い低レイヤの仕事だったり、SI だったり、コーポレートエンジニアだったり、色々やってきたので、広く「ソフトウェアエンジニア」の括りで考えてもそれほど遠くないはずです。

ちなみに、タイトルは「やがて至る無形の位への道」です。

スライドは公開しませんが、この記事は残しておきます(少なくとも2023年中は)。

無形の位とは

自分はあまり剣術には詳しくないんですが、「むけいのかまえ」「むけいのくらい」などと呼ばれる一刀流、新陰流、などに出てくる究極の構えと言われている境地です。

構え自体に善し悪しはなく、どの構えでも自分の手にぴったりと合い、気持ちにかなった構えを用いるべきである。このように心と構えとが一致した構えをこそ当流においては「無形の構え」と呼ぶのである。

竹田隆一・長尾直茂「一刀斎先生剣法書訳注」より

相手の出方次第でどうにでも対処可能な技術があればこそ、の構えです。

ぶっちゃけていうと、ソフトウェアエンジニアは当分の間安泰だと思うので、生存戦略とか考える必要性はあんまりないと思うんですが、フリーランス(業務委託)ってなると、不景気になって雇用が不安定になると正社員よりさきに煽りを食う存在なので、少しでも有利になるように戦略はあって損はないとも思います。

話の要諦としては、「あまり深刻に考えず、自然体で楽しく仕事できたら楽だからそこを目指していきましょう」ということです。

目次

1. 戦略とは

前提として、戦略とはなにかを知っておく必要があると思うので、ざっくりですが定義をしておきます。

  • 目標や目的を達成するための技術・理論
  • 元は軍事用語
  • 戦争の目的は勝つこと
  • 戦略とは、勝つためにどのように戦うかの方針

また、戦略はそれ単独で存在しうるものではなく、必ず目的や資源などと一緒に考える必要があります。

孫子の有名な言葉で「彼を知り己を知れば百戦して殆うからず」というのがありますが、「相手」と「自分」を知ることが目的達成には必要です。

戦略とそれ以外の要素の関係は以下のようになります。

  • 目的: 戦略を用いて達成したいこと
  • 戦術: 戦略に基づいて実際に実行する打ち手
  • 資源: 戦略を実現するために必要な源泉
  • 兵站: 資源を効率的に活用するための流通

まとめると「戦略とは、目的を達成するための理論であり、実現のためには確実に戦術を実施しなければならず、十分な資源と兵站がなくてはならない」ということになります。

前述のとおり、ソフトウェアエンジニアは現状十分な需要があるので、生き残るという目的に対してはとくに戦略など立てなくても達成可能と思います。

しかし、自滅だけは需給バランスは関係ないので、生き残れないケースとしていちばん可能性があるのは、身体もしくは心が耐えられなくなってソフトウェアエンジニアを辞める、ということではないかと思います。

というわけで、「いかに身体を壊さず、諦めずにフリーランスで戦い続けられるか」が最低限達成したい目的になるんだろうと思います。

2. 目的

目的のない戦略は意味がないので、まずはどういう目的を達成したいかを考えます。上に挙げた最低限の目的である「いかに身体を壊さず、諦めずにフリーランスで戦い続けられるか」でもいいですし、もう少し稼ぎたいとか、自由に働きたいとか、そういうことです。

これまでも同様のテーマで話したことがあるんですが、毎回出すのはこの図です。

https://ja.wikipedia.org/wiki/生き甲斐 より

みんなそれぞれ働く目的が違うと思うんですが、自分がいまなんのために働いているのか、というのを意識しておくのは重要で、一生一貫して同じ目的を目指すことってあんまりないと思いますし、ステージや状況によって少しずつ変化する中で、この図を常に頭に置いておくことは、いまはどういう状況なのかとか、最低限これだけは守りたいとか、次はここを目指したいとか、そういう判断や決断の基準となる立ち位置を示してくれるものと思っています。

自分自身を振り返ってみると、若いときはとにかく稼ぎたいと思って「Profession = 稼げること + 得意なこと」を軸に働いていましたが、歳を取るにつれて「Mission = 好きなこと + 求められること」にシフトしてきました。

いまでも「得意なこと」は意識してますが、「稼げること」はほぼ眼中になくて、「好きなこと」>「求められること」>「得意なこと」>「稼げること」の順になっています。

3. 資源

自分は、働く上で重要な資源は以下の8つと考えています。2つずつペアにしているのは、強い関連があるからです。

  • 身体と心
  • お金と時間
  • 能力と経験
  • 人脈と信頼

身体と心

何はなくとも身体と心。前述のとおり、自滅パターンは避けなければならないので、これが最重要と考えます。体も心も壊したときに回復に時間がかかるケースがあり、最悪働くことすらできなくなってしまうので、ダメージがでかいです。健康第一。

お金と時間

若い頃には月8000円まで書籍の予算を確保するようにしていました。仕事をする中でスキルが足りない部分があれば、自覚してからあまり時間を置かずに勉強したほうがいいので、そういうのがあったときはすぐにお金と時間を投下しました。生活を圧迫するほど費やすのは本末転倒ですが、捻出できるギリギリのラインを見極めて、惜しまず使っていきましょう。問題は使い方で、いい本を選ぶ、効率的に時間を使う、無駄なことを省く、みたいなテクニックがあるといいですね。めちゃくちゃ勉強してるのに、一向にスキルが上がらない、ってことは避けたいです。

能力と経験

能力といっても、テクニカルスキル、ヒューマンスキル、コンセプチュアルスキル、みたいに様々なスキルがあるので、得意なことを伸ばしつつ、不得意な部分を強化する、みたいな戦略が必要です。詳しい話は今回はしないですが、キャリア戦略と密接に関係する部分だと思うので、自己分析をして、いま持ってるスキル、これから獲得したいスキル、みたいなのを洗い出してみるといいでしょう。

経験は積めば積むほど自分の資産になっていくので、色々経験しておくといいんじゃないでしょうか。

この辺は色々書きたいことはありますが、また別の機会にでも。

人脈と信頼

とくにフリーランスだとこの2つはめちゃくちゃ大事です。まぁ、まったく関連のない企業を渡り歩くことも不可能じゃないので、適当な仕事して契約切られまくりながら生き残ってる人たちもいるんだろうとは思いますが、本人もやってて疲れると思うんですよね。自分もこれまで酷いフリーランスと仕事したことがありますが、若い人は仕方ないにしても、年の行ってる人もけっこういて、いままでどうやって食ってきたんだろう、って最初の頃は思いましたが、20年前からいままで大して変わってないので、そんなもんなんだな、という気持ちです。

自分はわりと人付き合いが苦手なので、自分のことを評価してくれる顔の広い知り合いが何人かいて仕事を紹介してくれるので、そういう人たちは大事にしていきたいと思います(とはいえ、なかなかタイミングとかで紹介受けられないことも多々あるので、そこは申し訳ないなと思いつつ、許してください)。

4. 状況

資源は自分の内側の話でしたが、今度は外側の話です。

労働も需要と供給で成り立っている以上需要がないと始まらないので、自分はこれができる・これがやりたいと思っても、金を出すからやってほしいと思ってる人がひとりもいなければ仕事にならないわけです。

なので、相手(自分の外側)の分析っていうのは欠かせなくて、経済みたいなマクロの視点から求人みたいなミクロな視点まで、先読みに必要な情報を得る習慣は持っておくといいんじゃないでしょうか。

といいつつ、自分はメインで PHP 使っていますが、PHP の将来性はだいぶ薄いわけで、戦略的にはあまりいいとは言えないなぁと思いつつ、他にやりたい言語もないし(Rust が流行ったら書きたいけど、ウェブアプリケーションで使われるようになるかな、という点であんまり期待はしてない)、Laravel がとにかく便利で使ってて楽しいので、Laravel の仕事があるうちは様子見、という感じです。毎年新しい言語を学ぶ、という習慣があったおかげで(最近はやってないけど)、キャッチアップはわりとすぐできるようになっているので、明日から違う言語やるぞってなってもそんなに困らなそう、という見通しが立ってるのが大きいですが。

まぁ、20年前に絶滅すると思っていた COBOL ですら生き残ってるので、PHP もまだまだイケるでしょ、という楽観的希望的観測もありますが、選択肢が多いのを重視しているので、もうレガシーな会社しか PHP は使ってない、みたいな流れになったら他へ移りたいと思ってます。

また、今回のテーマは「フリーランス」ってことなので、フリーランスと正社員の違いは最低限知っておく必要があって、自分はもう経験的に正社員にはなれないと諦めてるのでしょうがないですが、それ正社員でよくね?みたいな仕事をフリーランスでやってたり、せっかくフリーランスなのに特性を活かせてない、みたいなのは、自覚的にやってるならいいですが、無知のせいでそうなってるともったいないと思いますね。

なので、正社員とフリーランスの違いは押さえておく必要があって、漠然としかフリーランスのことをわかってない場合は、たとえば以下のような比較をしておいてください(下記はあくまで傾向です)。

契約 責任 報酬 安定 仕事の幅 育成
正社員 無期 高い 低い 高い 広い 期待できる
フリーランス 有期 低い 高い 低い 狭い 期待できない

とくに、ジュニアレベルでフリーランスになるのが流行ってる(た?)みたいですが、個人的にはぜんぜんおすすめしなくて、短期的には利益高くできるかもしれないですが、中長期的にはあんまりベネフィットないと思います。

いちばんの理由は、業務委託の立場で携われる仕事の領域が狭いことと、あまり教育コストを払ってもらえないこと、です(将来的に変わるかもしれませんし、当てはまらない事例もありますが)。

仕事の領域が狭いのは経験とスキルに直結しますし、教育コストが低いってことは成長機会が少ないってことなので、スキルが圧倒的に足りないうちは、正社員になって時間をかけてレベル上げするのがいいと思います。

逆に、フリーランスの良さとしては、安定を捨てて自由になる、というところがあって、自分は一時期5案件掛け持ちしてたことがありますが、そういうのはフリーランスじゃないとなかなかできないことなんじゃないかと思います。

5. 選択

資源と状況を把握したら、それらを判断材料にして選択する段階に入ります。

自分は学者ではないので一般論はわからないですが、自分の経験から言えることは、複数の選択肢からどれかひとつを選ぶ際、以下の事柄を意識するといいんじゃいかと思います。

  • 目的を見失わない
  • トレードオフになるものとならないものを分けて考える
  • 選択肢のメリットとデメリットを理解しておく
  • 選択肢のリスクとリターンを予想しておく
  • いつでも方向転換できるように準備しておく
  • 退路を断つという戦略もあり

選択はしばしばトレードオフになりますが、一見なりそうでもよく考えるとならないものもあると思っていて、わかりやすい例だと、選択肢 A だとやりたいことやれるけど報酬が低い、選択肢 B だと報酬は高いけどやりたいことができない、みたいなとき、交渉すれば A の報酬を B と同様に上げてもらうこともできるかもしれない、みたいなことです。

メリットとデメリットに関してはメリット優先で考えて、デメリットもあるけど、メリットがデカいのでそっちを取る、っていう意識はいつもしています。

個人的にはあまりやったことないですが、退路を断つっていうのが効果的な局面はあって、自分のような意志の弱い人間にとって、踏ん切りがつかない場面で清水の舞台から飛び降りる、みたいなときは、退路がないほうが楽というか、やるしかない、みたいな覚悟が生まれて、結果的に上手くいったということもありました。どっちかっていうと乱暴な戦略なのであんまりおすすめはしないですが、失敗時のリスクを回収できるなら、採用してもいいかもしれないです。

そのときどきの選択に後悔しないようにするために、あらかじめできることをやっておく、というのは自分の性格的な理由から必要なことなのかもしれなくて、スパスパ決断できる人っていうのは、あんまりこういうことをやらなくてもいいのかもしれないですけどね。

あと個人的に大事にしてるのは、究極形をイメージしておく、というのがあって、いま現在の自分のレベルや達成度みたいなものは究極形からものすごく距離が離れているけれども、少しずつでも速く近づくために方角を意識しておく、ということです。ikigai のベン図と組み合わせてコンパスの役割をします。

  • やりたいと思えない → どうすればやりたくなるか
  • できない → どうすればできるようになるか
  • 需要がない → どうすればほしいと思ってもらえるか
  • 儲からない → どうすればお金を払ってもらえるか

自分としてはいちばん上は意識していて、こないだバックエンドエンジニアとして参画した現場で、諸事情によりブリッジSE的なロールを与えられたんですが、まぁぶっちゃけあんまり乗り気ではなくて、他に人がいないからやる、みたいな感じで引き受けて、でもやるからには楽しんでやりたかったので、相手がベトナム人のチームだったので、それを機にベトナム語の勉強を始めました。結果、メンバーとのコミュニケーションが楽しくなり、ブリッジの仕事自体を楽しむことができました。どの辺から興味を持てるかっていうポイントを探して、どんな仕事でも楽しむっていう姿勢は大事にしてますね。

現実を究極に近づけるためになにをすればいいか、私なりのポイントをいくつか考えてみましたが、こんな感じでとても平凡なものになってしまいました。 私は要領が悪いので、愚直にやるしかないっていう部分はあるんですが、シンプルでわかりやすいのはいいんじゃないかっていう気もしてます。

  • 健康第一
  • 目的を明確にする
  • 自分を知り相手を知る
  • 技術を磨く
  • 縁を大事に
  • 師範を見つける

最後に、自分の選択基準的なものを列挙して終わりにしたいと思います。

  • 疲れたら休息優先
  • 内発的動機づけ(楽しさ)重視
    • Passion > Mission > Profession > Vocation
  • 人重視(何をするかより誰とするか)
  • 繋がり重視(頼まれたら基本的に断らない)
  • チャレンジ重視(迷ったら困難な方を選ぶ)

他にもいくつかありますが、大きいところではこんな感じです。

おわりに

上にも書いたとおり、何を大事にするかっていうのは人それぞれだし、タイミングや状況によっても変わってくる部分もあると思うので、これまで述べてきた諸々を踏まえた上で、参考になる部分は参考にしていただければと思いますし、当面の間は食いっぱぐれることはない業界だと思うので(中にはニッチは技術のみ持っていて市場が急速に縮小している、みたいなケースもあると思うので、そういう場合は危機感持ったほうがいいでしょうけど)、気楽に構えていればいいんじゃないかと思います。

とはいえ、自分で「行きたい道を行けている」という安心感みたいなのがあると精神衛生上いいと思うので、指針はあったほうがいいですし、無理しない範囲でストレッチをかけていくっていうことも必要なんじゃないかと思います。

では、みなさん、良いエンジニアライフを。