転職して3ヶ月が経ちました。
正確には3ヶ月と半月ですね。 今年の2月末をもって株式会社メルカリを退職し、3月から株式会社ナレッジワークで働いています。
メルカリでの思い出は社内のwikiとslackに置いてきたので退職ブログで書くことがなくて放置していましたが、新しい会社で試用期間も過ぎた(たぶん)ので、ちょっと近況を書いておこうと思います。
メルカリについて
多くを書く気はないのですが、自分はプレイヤーとしてもマネージャーとしても激動の中で色んな経験をさせてもらい、学ぶことの多い場所でした。 またMerciBox制度の補助のおかげで不妊治療を続けられて子供を授かることができたので、本当に感謝しています。
人生の辛い部分をガッツリ支えてくれる、そういう制度がある/どんどん改善されるのは本当に「いい会社だな」と感じる効果あるな〜と身を持って感じました。みなさんマジ福利厚生を厚くしたほうがいいですよ。
個人的には、辞めてなおいい会社だと感じますし、十分にこれからも人におすすめできるし、強く成長していくんだろうなと感じています。
ナレッジワークについて
株式会社ナレッジワークは、昨年4月に創業したばかりのスタートアップ企業です。 現在プロダクトはまだステルスでやっているため、詳細については多くを語れません。 すごくざっくりいうと人の業務体験を変える、ワークエクスペリエンスを高めていくようなことを目指しています。
現在そこで自分はインフラ/SREのソフトウェアエンジニアとして働いています。
今まで自分はキャリアを特定分野に制限せずに、 インフラからWeb Frontend / iOSまで色々やってきましたが、ここ3年はEngineering Managerとして現場を離れていました。 そのため、改めてプレイヤーをやる選択をする際に今までのキャリアで最も強い専門性だったインフラのエンジニアとしてやらせてもらっています。
久々の現場で学ぶフェーズも多くて迷惑もかけていますが、積んできた経験をいろんな形で使いまわして頑張っています。
会社の中の様子
正直言うと、自画自賛みたいなセクションです、ここは。
ナレッジワークに入って一番に驚いたことが、1年未満のスタートアップとは思えない整備された組織体制です。。。!
明確なビジョンと精度の高い計画、ホワイトに働ける整った会社制度と評価制度、デザイン・ビジネス・技術のバランスを取って高いレベルでプロダクト議論とループが回せるチームメンバー、これまでの経験で見知った10名弱のスタートアップやチームとは一線を画すハイレベルな世界がありました。
一方でスタートアップ特有の勢いがないのかというとそういうわけではなく、メンバー全員の納得のもとで毎日ハイペースで仕様が決まり、驚異的なペースで開発が進んでいます。
わりと会社や中の人達の性質的に、きちんと上段の目線から物事を整えて決めていくのがが好き&力もある人が多いようで、様々な物事が筋が通った形で整っています。
個人的には、スタートアップに行くからにはダーティで整っていない会社を形作っていくフェーズもあるかな〜それもそれで楽しいかな〜、なんて思っていたらしっかりしすぎていて、逆に入ってビビってしまいましたw
メンバー募集の話
上に書いたようにとても整った会社ですが、今は社員が10名を超えたところでまだまだ小さい組織です。 ナレッジワークはステルスでやっている性質上、これまで採用は社員リファラルやダイレクトコンタクトなどに限定されていました。
ですが、ここから正式リリースに向けてもう一段ギアを上げていくためエンジニアを募集することになり、応募も窓口を開くことになりました。
なので!やっと!エンジニア絶賛募集中です!!!!!!みんなきてね!!!!!
上記ページの採用デックもここに貼っておきます。
弊社のCTOもシェアしてたんですが、
株式会社ナレッジワークの採用ページが新しくなって、エンジニア職は直接応募ができるようにしました (via HERP)。
— mayah (@mayahjp) 2021年6月14日
待遇・労働条件もearly stageのスタートアップにしてはそんなに悪くないと思っています。上を言い出せばキリがないけど。まだ良くしていきたいです。https://t.co/NKq4wbkGMS pic.twitter.com/5y1QPODzg1
early stageにしては・・・などと言ってますが、報酬も普通にしっかりしてると思います。
全然プロダクトの話が書けていないのですが、なんとなく興味が湧いた・ちょっと話を聞いてみたっくなったなんて人はぜひ、こちらのフォームに入れてみるでも自分のTwittterやSNSで声かけてみるでも、何でもお待ちしていますのでよろしくおねがいします!!!
Karabiner-ElementsでESCやCtrl+[キー押下時に日本語入力を解除できるようになっていた
タイトルで全て言った。
普段からメモにMacVimを常用してるのだけど、Karabiner-Elementsになってから日本語モードからの切替時に いちいち日本語IMEを自分で解除しないといけなくて、手間だった。
が、気づいたらこれをさっと実現するCustom設定が使えるようになってた。。。!
実は結構前からっぽい。 すごく幸せになれる設定だったので、早速入れてみた。
設定方法
Karabiner-Elementsの[Preference]->[Complex Modifications]
下部の[Add rule] -> [Import more rules from the Internet(open a web browser)]
これで、 Karabiner-Elementsの追加ルール群のページ が開くので、
そこで [International (Language Specific)] -> [For Japanese (日本環境けの設定) (rev 3)] を import する
再びKarabiner-Elementsの[Add rule] 画面を開き、
escキーを押したときに、英数キーも送信する(vim用)
Ctrl+[を押したときに、英数キーも送信する(vim用) (rev 2)
の2つを Enable
にする。
これで、vim上で挿入モードを抜ける際に日本語入力を解除できるようになる。
快適で涙が出るっす。
補足と参考
この設定は別にvim専用の設定にはなっていないので、当然他のアプリ上でもESC叩くと英数キーが送信される。
個人的には困らないからいいかなーと思ってるけど、もし対象のAppを絞りたい場合には以下のように 自分で complex modificationの設定を書いて追加することが可能ぽい。
docker & Kubernetes on Mac の環境構築 at 2018初頭
ここしばらくインフラ方面の知識updateがなく、久々にdocker周りから復習するかーと思い立ってみました。
が、進化の速さとか大人の都合とかによって1~2年のうちに状況が2転3転していたようで様々な情報が入り乱れていて、入門するにしても「で、どれを信じればええねん」という感じに。
というわけで自分なりに状況を調べて、「少なくとも2018年1月現在において、こうセットアップしてくのが便利かつ標準そう」というのを手順とともにまとめました。
目指す環境
- Mac上でdocker、およびKubernetesのローカル環境を構築する
リモートのdocker / Kubernetes はcliの docker / kubectl を使えばいいので、ひとまずこれだけ。
先にまとめ
先にまとめると、以下をやっとけば良い。
% brew tap caskroom/versions % brew cask install docker-edge % open /Applications/Docker.app -> Preference -> [Enable Kubernetes]
もう少し状況説明
Dockerについて
- 現時点では
Docker for Mac
を利用するのが便利かつ標準 - homebrewの場合は
homebrew-caskのdocker
を使うのが正解- homebrew本家が持ってる
docker
fomulaは古いので使わない
- homebrew本家が持ってる
- 現時点では
Kubernetesについて
Docker for Mac
の Edge版から入ってくるKubernetesを使うのが良さそう- 多分まだ世の中は
minikube
が標準 - Docker for MacのKubernetesサポートによって変化が始まってて、どちらが標準をとるかはまだ不明
- でも手軽さ分こっちかなーって思うので採用した
- 多分まだ世の中は
- caskのversionsに
docker-edge
があるので、当面はこれが楽
ちなみにKubernetesのInstall
これをチェック入れて、進めると
これで完了。
最後に
Kubernetesとかkubectlの発音って、DockerCon の動画見てると キューバネティス
キューブコントロール
って呼んでて、僕も今度からそう呼ぼうって思いましたまる
iOSDC Japan 2016 に参加してきた
iOSDC Japana 2016、まるっと一日参加してきました。 すごくたくさんの人と熱気で、トークも面白いものがぎっしり詰まっていてとても充実したイベントでした。
スタッフならびにスピーカーの皆様、素敵なイベントをありがとうございますっ!\\\٩( 'ω' )و ///
LTはペースに追いつけずにまとめられなかったんですが、今日聞いてきたトークはそれぞれログを取りました。 (資料が貼ってないものは、見つけ次第足します)
色々新しい情報とか参考になる話を聞けたので、明日は気になるところを少し深掘りとかしてみようかなー。
- iOSDC Japan 2016 参加メモ: A-1 - Handling rich text in Swift
- iOSDC Japan 2016 参加メモ: A-2 RxSwiftは開発をどう変えたか
- iOSDC Japan 2016 参加メモ: A-3 iOS 10時代の新しいCollectionView使いこなし術
- iOSDC Japan 2016 参加メモ: A-5 Reactive State Machine
- iOSDC Japan 2016 参加メモ: A-6 ドッグフーディングしやすい環境を整える
- iOSDC Japan 2016 参加メモ: A-7 メモリー管理の嬉しいバイキング料理
- iOSDC Japan 2016 参加メモ: A-8 デザイナーにStoryboardをお任せする技術
- iOSDC Japan 2016 参加メモ: B-9 Swiftのこれまでの動向のまとめと今後のさらなる発展の期待
- iOSDC Japan 2016 参加メモ: A-10 SwiftでJavaScript始めませんか?
- iOSDC Japan 2016 参加メモ: A-11 Xcodeで快適なデバッグライフを追い求める
iOSDC Japan 2016 参加メモ: A-11 Xcodeで快適なデバッグライフを追い求める
Xcode
クラッシュしたらAppDelegateだった問題
- もしくはアセンブラだった問題
Exception Breakpointを追加
Breakpoint追加時に
Exception Breakpoint
を選んで追加- ただし、Exception前提で書かれていると意図と違うタイミングでbreakしてしまう
- storyboardがなければフォールバックする、とか
- ただし、Exception前提で書かれていると意図と違うタイミングでbreakしてしまう
Diagonosticsを設定
- 不正なメモリ操作を検知
- dynamic library
- Edit Schemaから設定できる
- Enable Zombi Object
- Enable Address Sanitizor -> パフォーマンスは下がる
- アセンブラレベルまでクラッシュした場合、これがあれば追える
どのViewControllerかわからない問題
新しいプロジェクトに入ると。。。
Symblic Breakpointを追加
- SymbolにviewWillAppear / viewDidLoadなどを追加
- commandで
bt 0
するとでる
- commandで
- viewControllerで設定しておかないと、Symbolic Breakpointが効かない
- SymbolにviewWillAppear / viewDidLoadなどを追加
Share Breakpointすると、チーム間で共有できる
起動時に特定のViewControllerにしたい問題
- デバッグ時に深いページ開くの辛い。。。
- Environment Variables
端末のログやファイルを取得したい問題
実機のログやRealmをみたい
- できるけどめんどくさい
LLDBを使って該当ファイルをSlackに送信
- breakpointでbreakしてコマンドを打つ
- gistに公開しました
./llidbinit
の中に呼び出しを入れておく
まとめ
- 快適になると良いね!
QA
Closureの中でオブジェクトを参照する方法とかありますか?
- lldbが巧くフレームを取れてないのが悪そう
- 2連発で取ると巧く行くことはある。。。けど基本諦めてる
Breakpointとlogが多すぎてわからなくなるのはどうしてますか?
- Loglevelを切り替えられるようにしたりして、フィルタしてる
iOSDC Japan 2016 参加メモ: A-10 SwiftでJavaScript始めませんか?
JavaScriptすきですか?
- SwiftからJavaScriptが使える!
- JavascriptCore
熊谷さん
- 横浜の方で勉強会してます
- ネットラジオも始めます
SwiftでJavaScript
- JavaScript
- 手軽に書けるスクリプト言語
JavaScriptCoreとは
- JSのランタイム実行環境
Swiftとの相互運用が可能
使用例
ちょっとまった
基本的な使い方
- JavaScriptCoreをimport
- JSContext生成
- JSコード実行
- evalの結果はcontextに溜まっていく
- 実行結果をSwiftで受け取る
- 返り値をSwiftで受け取れる
変数の扱い
JSValueで表現
- toTypenameメソッドでSwiftの型にできる
- isTypenameプロパティで判定してから取り出せる
オブジェクトもJSValueで
- swift側からforPropertyなどで取り出したりできる
JavaScript API
- JSの基本的な組み込み機能だけが備わっている
DOMなどの高度なものはない
自分の手でAPIを構築していく
- やり方は色々
- JSからでもSwiftからでも
- やり方は色々
変数/関数/オブジェクトをJSで定義する
- 普通にeval
Swiftで定義する
- setObjectすることで、JS上で参照できるようになる
- 参照型だと共有しちゃう
関数をSwiftから取り込む
- クロージャをコンテキストに設定する
- AnyObjectにキャストしてsetObjecすると、JS上から呼び出せる
Swiftの型をJSで使う
Swiftの機能をそのままJS上で使える!
コードを書きやすくする方法
- 普通に書いてると読みづらい
- プロジェクトにJSファイルを組み込んで、Bundleから読み込んでStringにしてevalに流してあげれば楽にできる
まとめ
- JSをSwiftから簡単・自在に扱える
- 審査通るかは、後日!
QA
ECMAScript 2016は対応してる?
- 行けそう
JS側でSwiftのオブジェクトを参照した場合、開放されたオブジェクトの扱いはどうなる?
- JS Managed Valueあたりを見るとわかるかも
React Nativeは使ってたはずなので、審査は通りそう
iOSDC Japan 2016 参加メモ: B-9 Swiftのこれまでの動向のまとめと今後のさらなる発展の期待
@_mono
小野 将之さん Join.us の中の人
Swiftの変遷
これまでをおさらい
2014/06公開
2015/09
- Swift 2
- 主な不満点が解消
- クラッシュ頻度低下
- 差分ビルド対応
- 言語仕様が十分揃ってきた
2015/12/03
これからの話
Swift 3.0
- オープンソース化初のメジャーアップデート
Swift 2.2
- 3.0のプレリリース的扱い
Swift 3のアップデート内容
最後の大きな破壊的変更
- 微妙な言語仕様を全面見直し
あらゆるものをSwiftyに
互換性問題
Swiftyにしていく
- Objective-C由来のインターフェースの見直し
-
- Objective-Cとして正しく書かれたAPIを自動変換
Foundationフレームワークのクラスに対応したSwiftの値型が追加
- C言語APIをSwiftっぽく変換
- 古いライブラリでもオブジェクト指向っぽくかける
最後に
- 連載もよろしくね!