読者です 読者をやめる 読者になる 読者になる

de:code 2016で気になったポイント

全体的な感想

  • ナデラ来た、ナデラ以外にも本社の人間たくさんきた。ここ数年で考えたら偉いパワーが入ってる感じをすごく受ける。
  • 基調講演ではConversation (as a Platform)、BOT、DevOpsが特に押されていた印象。
  • イベント全体ではDevOpsの印象が強かった(牛尾さんパワーと豪華メンバーを連れてきたというのがある)
  • 一方でIoTの印象が弱かった。ロボティクス自体はそれなりに印象があるんだけど。ただし、これはバイアスがかかってるかも。
  • UWP, Azure, Office365は相変わらず。Xamarinは勢いを感じた。
  • 富士通がスポンサーから消えて、日系メーカーは全滅になった。メジャーなPCメーカーはDELLぐらい。
    • 一方で同日開催のJava Day Tokyo 2016にはNEC、日立、富士通がスポンサーやってるのはなんというか。

その他、個人レベルの感想

  • 分散システムとか触ってる人間としては、Contractの勉強しないといけない気分になった
  • 荒井さんマジ荒井さん

Office 365アカウントでDropbox Businessにシングルサインオン

Office365 Dropbox

少し手数はあるものの、くっそ簡単にOffice 365アカウントでDropbox Businessにシングルサインオン(Office 365アカウントでDropbox Businessにログイン)と、アカウントプロビジョニング(Office 365アカウントをDropbox Business側に同期させる)設定がくっそ簡単にできたのでメモっておく。

Office 365とシングルサインオン(SSO)みたいなワードでググると、オンプレのADと連携させるとか、OneLoginやらのIDaaSと連携させるとか、くっそ面倒な手順の解説ばかりが見つかるのだけど、単純にOffice 365(厳密にはAzure Active Directory: Azure AD、Office 365アカウントがあれば無償利用できる)単体でどうにかなるようだ。

あえて言うまでもないとは思うが、Office 365には既に登録してある前提の手順となる。

  1. Dropbox for Bisunessに登録。最初のアカウント登録は、管理者となるOffice 365アカウントのメールアドレスで行う。
  2. Azure ADを有効化する。Azureの管理センターのメニューでAzure ADを選択すれば、有効化されるはず(うちの環境ではかなり前から有効化済みなので、この手順はあいまい)
  3. Azure ADの管理画面を開いて、アプリケーション→追加→ギャラリーからアプリケーションを追加で、Dropbox Businessを選択する。
  4. あとはウィザードに従って、設定を行う。

だいたいこんな感じの設定手順で設定が行えた。アカウントプロビジョニングの設定を行うと、Azure AD側からDropbox Bisinessを利用できるアカウントの管理ができるようになる。

sbtでJava/JUnit用の設定

sbt

build.sbtに以下を追加すれば、sbtでJavaでコードを書いてJUnitでテストができる。

javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-encoding", "UTF-8")

libraryDependencies ++= Seq(
  "junit" % "junit" % "4.12" % "test",
  "com.novocode" % "junit-interface" % "0.11" % "test"
)

Windows 10をVAIO Zにインストールして、最低限の開発環境を構築する手順

Windows10

Windows 10をVAIO Z(VJZ13A1)にクリーンインストールした。今のところはWindows 10に満足している。

方針

  • OneGetを使ってみる
  • MSYS2を使ってみる

Windows 10のインストールまで

  1. diskpartを使う手順でインストールUSBメディアを作成して、普通にインストール
  2. Windows Update(USB LANアダプタを使っていたので、普通にインストールした時点でネットワークを認識していた)
  3. 公式サポートで配布しているWindows 10移行ツールを使って、ドライバーをインストール
  4. 一部ドライバーが不足するので、オリジナルドライバーの一部を導入
    • VFEP Driver
    • SSD Setting
    • LCD Setting
    • VAIO Shared Library
    • VAIO Power Management

ドライバー入手の時点で面倒だとかそういうのは一切なく、本当にすんなりインストールできる。今までのVAIOと比較したら隔世の感がある。

Windows 10の設定

好みの問題で、以下の設定を行った。

  • タスクバーを右クリック→プロパティ→ナビゲーション→「左下隅を右クリックするか(中略)PowerShellに置き換える」をON
  • 設定→パーソナル設定→スタート→「全画面表示のスタート画面を使う」をON

PowerShellの設定

PowerShellを起動して、ポリシーを変更する。

Set-ExecutionPolicy RemoteSigned

OneGet(Chocolatey)の設定

Windows 10から、OneGetが標準搭載されて便利になった。OneGetでは、Chocolateyリポジトリを参照することが可能なので設定する。

PowerShellで、以下のコマンドを実行する。Find-Packageでfirefoxを指定しているが、別になんでもいい。途中でChocolateyのモジュールを登録するか否かをか聞かれるので、y(es)と打っておく。

Get-PackageProvider chocolatey
Find-Package -Provider chocolatey firefox

OneGet(Chocolatey)でパッケージのインストール

有名どころのパッケージであれば、Chocolateyでのインストールでも問題はないので、使えるところには積極的に利用する。

とはいえ、私がOneGet(Chocolatey)でインストールしたパッケージは以下のみ。

Install-Package firefox
Install-Package google-chrome-x64
Install-Package keepass
Install-Package jdk8

MSYS2

最近はMSYS2だとpacmanが使えて便利とのことなので、インストールしてみた。

インストールは、MSYS2 installerに書いてある通りで良い。pacmanのコマンドオプションは、pacman - ArchWikiあたりを見とけばよい。

デフォルトでPATHには/usr/local/binが通してあるのだけど、なぜか/usr/localが存在してないので、作っておく。

mkdir /usr/local

追加パッケージ

gccやらのビルドに必要な最低限のパッケージを入れる。

pacman -S base-devel
pacman -S msys2-devel

Gitをインストールする。依存パッケージとしてopensslやらsshやらvimやらが入るので便利。

pacman -S git

Cmder

minttyよりCmderの方が好きなので、CmderからMSYS2を扱えるようにする。Cmderの設定画面で以下のように入力する。

  • Startup → Commandline : "C:\msys64\usr\bin\bash.exe" --login -i

あと、フォントは好みだとは思うけど、あずきフォントにした。

その他

Office, Visual Studio, IntelliJ IDEA等をインストールしているが省略。

MSYS2とsbtの設定

MSYS2 sbt

sbt(Windows MSI版)とMSYS2の組み合わせで、JVMオプションを指定したい場合、.bashrcで以下のように指定するのが無難っぽい。

alias sbt="JAVA_OPTS='-Xms512M -Xmx1G -XX:ReservedCodeCacheSize=256M -Dinput.encoding=Cp1252' sbt"

${SBT_HOME}bin/sbt のソースを読む限り、conf/sbtconfig.txtは使われていないし、SBT_OPTSでの指定だと適用順の問題でメモリ設定が上書きされてしまうので、この設定に至った。これなら、カレントディレクトリに.sbtoptsファイルが置いてあれば、そちらの設定も優先される。

-Dinput.encoding=Cp1252は、始める sbt — 手動インストールを参照。

また、sbtの起動オプションに -Dfile.encoding=UTF-8指定しないのがポイント。これを指定してしまうと、コンソールで文字化けしてしまうので、以下のようにbuild.sbtでエンコーディングを指定するほうがよさそう。

javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-encoding", "UTF-8"),
scalacOptions ++= Seq("-encoding", "UTF-8")

安定寄りの零細IT会社を作って1年ちょいで得た知見

デンキヤギ株式会社という名のITの会社を作ってから1年強になった。

自社プロダクトを事業の中心に据えたいとは考えているが、まずは安定経営のため受託開発を優先してきたことにより得た知見をまとめておく。ちらほらと「会社を作ってどうよ」みたいな事は聞かれた際に、まともに答えてきていなかったという自覚があるので、その回答でもある。

設立以前から現在までのざっくりの状況

  • 中小SIerでサラリーマンエンジニア歴10年(うち5年ぐらいはR&D部門所属)
    • 名古屋ローカルではあるが、コミュニティ活動はガッツリやってきた方
  • まずは1人だけの株式会社を設立
  • 設立から1年ちょいの間に社員を2人採用
  • 現時点では受託開発中心で、安定に寄せた経営方針
  • 業績はボチボチ、倒産の危機とかはない程度には良い

とりあえず受託で食っていくために必要なもの

  • カネ
  • コネ
  • 相場・市況感
  • ちゃんと仕事を回してちゃんと納品する能力

さえあれば、受託中心の零細会社程度ならどうにかなる。

カネ

カネが多ければ多いほど選択肢が広がり精神的余裕も出るが、逆に少なくて良いことは一つもない。

開業するための資金(開業資金≒資本金、手元に残す資金、退職収入などを含めたもの)として、

  • 法人登記(株式会社だと最低21万円)
  • 初期設備費(PC、ソフトなど)
  • 最低6か月分の生活費および運転資金(給与、社会保険料、オフィス賃料、光熱費、通信費、インフラ費など)
  • その他雑費

を用意しておく必要がある。ぶっちゃけ「最低6か月分の生活費および運転資金」が一番重要である。

会社を作るといっても、「登記の準備~実営業開始まで」だけで2か月はかかるし、営業開始直後に「月末締め、支払いサイト30日」という理想に近い仕事を受注できたとしても着手から入金まで2か月かかる。よって、設立準備から理想的な形で進んだとしても、収入を得られるまで4か月はかかる。バッファを積むと6か月でギリギリということになる。

社会保険料についてもサラリーマンをしていると実感が伴わないのだが、健康保険と厚生年金の月負担額が、年収400万円で7-9万円程度、年収500万で9-11万円程度になる。サラリーマンの間は会社に50%を負担してもらえていたが、経営者になってしまったら全額を賄わなければならない。

開業資金の具体的な金額については、事業計画、開業スケジュール、配偶者・子供の有無などにもよるところがあるので一概には言えないし、適当な起業本を数冊読んで自分で考えた方が良いとは思うが、

  • 実家なり配偶者に養ってもらえるなら、100-150万円
  • 独り身or共働き世帯なら、200-300万円
  • 配偶者が専業主夫/婦なら、300-400万円

ぐらいが最低ラインではないかと思う。あくまで最低ラインなので、これの1.5-2倍ぐらいは用意できないと余裕はないとは思う。

コネ

いざ開業しても、コネ(営業チャネル)がないと事業が成り立たない。都市圏であればコネがなくても仕事が取れない訳ではないのだが、実績・信用がない以上、まともな単価・内容の仕事を取るのは不可能に近い。

月並みな話にはなるが、

  • 前職に頭を下げる
  • 前職で関わった顧客に営業をかける
  • 勉強会等で知り合った会社・人に営業をかけたり、同業他社の営業を紹介してもらう
  • まったく面識のない会社でも、職務経歴書+技術ブログやGitHubなどのPR情報をベースに問い合わせ窓口からアポ取り

ような事ができれば、どうにかなる気はする。「コネがなければコネを作る」ぐらいの事ができないと非常につらいし、それは無理だと思うような人は起業という選択はすべきではない。

あと蛇足だとは思うが、営業をかけるにしても、フリーランスに近い人間とでも取引してくれるような会社でなければ意味はないということは補足しておく。大企業の人間と付き合っても直接的な利益は生まないという事だ。まぁ、そこまで考えてるとだるいけど。

相場・市況感

いざ仕事が取れそうであっても、単価の安い仕事を請けてしまうと、ワーキングプアの世界へようこそになってしまう。相場・市況感を抑えておく必要がある。

そんなに難しい話ではなく、

  • 仕事をする地域・分野での底辺レベルの単価を抑えておく
  • 現在の市場が好況/不況なのか、人手は足りているか否か

さえ押さえておけば、あとは底辺にならないような仕事を取るだけである。

2014年末時点の底辺単価については、

  • 東京 … 54万円/月(時間単価3000円×180H)
  • 名古屋・大阪 … 48万円/月(時間単価3000円×160H)

といった感じだと私は認識している。これを下回るものも当然あるが、底辺の背比べをしても意味はないと思うし、今の市況なら実績ゼロに近くてもこの単価は取れるとは思う。

そして重要な事としては、底辺単価層には「if文が怪しい」レベルの人間が相当数おり、発注側もそれを認識したうえで発注を行っているという事実がある。底辺によればよるほどマトモな人間の割合は下がるし、マトモかつ実績のある人間ほど人手不足である。

これを前提として、ふっかけるぐらいの感覚で単価交渉を行っていかなければならない。実績ゼロであっても「基本単価は○○万円ですが、最初の1か月はディスカウントします。もしダメなら契約解除で構いません。」ぐらいの事は言う必要がある。底辺人材が欲しい発注者であれば契約には至らないだろうし、変な会社除けになると思う。

あと、単価が安い仕事ではそれ相応の内容の仕事しか担当できず、いくら積み重ねたところで実績にもならないという事も認識しておかなければならない。

ちゃんと仕事を回してちゃんと納品する能力

ごく当たり前の話だが、これが出来る人間はそれほど多い訳ではない。ホウレンソウは当然として、仕様調整・進捗管理・課題管理などのいわゆるSE能力とかディレクション能力が必須になる。

プロとしてプロジェクト・チーム開発を円滑に回せないようでは、いくら技術力が高くてもカネを稼ぐことは難しい。クオリティを上げることは重要だが、ビジネスである以上は「作業量・クオリティ・スケジュール」と「対価」が見合っていないようでは破滅しかない。

そんなに難しい話でもなくて、1-3人のチームで1-2か月程度のプロジェクトが滞りなく回せるようであれば、最低限の水準には達しているとは思う。あとは、その上で割り切りであったり、交渉であったりが出来ればよい。逆にこれぐらいのプロジェクト規模でも炎上を繰り返してしまうような人は、サラリーマンのままでいた方が幸せではないかと思う。

その他雑多な事項

独立すると雑務が増える

「独立すると雑務が増える」とはよく言われるが、確かに増える。ただ、雑務とは言っても、経理・社外営業・営業方針の検討といった経営上重要なものから、郵便物を出しに行ったり、掃除したりなどの「誰でもできるけど人が居ないから自分でやらざるを得ない」タスクまで様々ある。

また、会社を設立してからしばらくの間は全ての物事がルーチン化していないので、例えば経費精算するにも「経理のために何を残さないとダメなんだだっけ」「申請書テンプレWordファイルをダウンロードしてくるか…」みたいなことをイチイチ考えなければならず、非常に時間がかかる。うちも設立してから1年が経過したので、だいぶマシにはなってきたが、未だにルーチン化できていないことは多々ある。

土日のどちらかは事務処理なり社内環境整備の日というぐらいの覚悟はしておいた方が良いし、それぐらいでやらないと全然間に合わない。ここは事務員さんを雇うなどしたい領域なのだが、弊社ではまだ踏み込めていない。

社員を雇うか否か

社員を雇うとそれだけで緊張感が生じるので、よく働くようになると思う。マッタリしたいという感じなら、フリーランスの方が楽だと思うし、そもそもサラリーマンのままでええやん感がある。

また、社員を雇うと「雇用責任ガー」とはよく言われるのだけど、どうせ本当にダメになった場合は退職給与とか払いようがないし、社会保険雇用保険に加入させるぐらいしかやれることないよね、と割り切ってしまっている。だって無理なものは無理だし。ただ、弊社の場合は、雇用保険的な位置づけで中小企業退職金共済を掛けることで、企業体力の範囲でできることはやっているつもりではある。

また、一旦人を雇うと解雇しづらいというのは事実ではあるのだけど、零細企業の場合は「給与に見合わない働きしかできない=雇い続けると収益に大きく影響が生じる」「配置転換しようにもそんなポストはない」ということから、十分に解雇要件は満たせてしまうため、正式な解雇手続きを行えば解雇できると認識している。

就業規則

GitHubに会社の就業規則を公開した - terurouメモにも書いた通り、弊社は就業規則GitHubに公開している。就業規則を作るのは非常に労力がかかるので万人にはおすすめできないのだが、社員を雇うのであれば賃金と有給の取り決めはキッチリ決めておいた方が良いと思う。

私の場合は、

  • 設立当初から社員を増やしたいという意図があった
  • 自分がサラリーマンなら就業規則のない会社は嫌だ
  • 受託の合間に自社プロダクト開発をしていくためには早いうちに片付けておくべきだろう

という考えがあったので優先した面がある。

就業規則を作ったことによるメリットは非常に大きかったのだが、反面、期間9か月・実働工数2人月もかかってしまい、自社プロダクト開発の着手が遅延した一因にもなってしまったので、人によって判断が割れると思う。

私は会社運営上のリスクを潰せた・顕在化させることが出来たことから、メリットの方が勝っていると思っている。

創業補助金

創業補助金をざっくり説明すると、300万円の経費(制限が多い)のうち200万円を国からキャッシュバックしてもらえる制度である。弊社もこれに採択されていて、補助金がもらえることがほぼ確定しているのだが、これについての詳細は実際に入金されてから別のエントリーで書きたい。

結論だけ書くと、事務処理なり事務局の意向に合わせた申請書作文にそれほど苦を感じない人であれば、選択肢として入れるのはありだし、そうではないのであれば近寄るべきではない。

役員報酬額

出来るだけ高く設定すべきである。少なくとも、理想ケースで仕事が取れた場合に会社収益がトントンか少し赤字になるぐらいの額には設定すべきである。変にリスクを織り込んで少なめの額に設定すべきではない。

会社というのは赤字になっても即座に倒産する訳ではなくて、運転資金が尽きたときに倒産するものである。仮に売上が足りず、そのまま役員報酬を支払ってしまうと会社の運転資金が尽きてしまうという状況が発生した場合、役員から会社に対して無利息貸付けを行う(=役員報酬を支払わず経理上は貸付扱いにする)ことで会社は潰れない。

会社は黒字になると法人税を支払う義務が生じるが、赤字なら最低限の税で済むし、赤字は翌年以降に持ち越すことができるので、売上が想定外に増えても過去の赤字で相殺することができる。赤字は一番の節税だと思う。

創業してから1-2年目までは赤字、3年目ぐらいで収支トントン、4年目ぐらいから単年度黒字ぐらいなら、世間では十分に普通の範疇だとみなしてもらえるので、過度に赤字を恐れることはないと思う。

ちなみに私の場合は、ビビッて初年度の役員報酬を低くし過ぎたため、この点はかなり失敗したなとは思っている。

まとめ

  • 起業するにはカネがないと無理だし、常にカネの事を考え続けなければならない
  • 会社を作れば権限は増えるが、その分の責任というか雑務が増える
  • 最初の1年目ぐらいは、雑務対応のせいでやりたいことに振り向ける時間はあんまりない

会社を作ることは手段でしかなくて、目的を果たすために他の手段が選択できるのあれば、わざわざ選択する理由はない。

Haxe/JavaScriptでSource Mapを出力するための設定

Haxe

ざっくりこんな感じです。

-cp src
-main Main
-js bin/main.js
-debug
-D source-map-content

"-debug" オプションを付けると、Source Mapが生成されるのは皆さんご存知だとは思いますが、これだけだと、HTTPサーバに配置した場合にSource Mapが読み込めません。これは、Haxeの生成するSource Mapでは、sourceRoot が file:// になってしまっているせいです。

で、ちょっと楽ができないものか調べていたら、3.1.0から(?)、"-D source-map-content"オプションが増えていたようです。これを有効にすると、sourcesContentにソースコードが埋め込まれるようになる=そのままHTTPサーバに配置してもSource Mapが使えるようになります。

changesにも書かれてないし、普通は気が付けないですよねぇ。