どうも7月入社してほどほど慣れてきた舘です!
普段は、iOSチームで開発しています!!
今回は社内向けにObjective-Cキャッチアップ勉強会を開催したのでその経緯を紹介したいと思います!
背景
SPIDERPLUSには、2011年9月から提供している社内ではクラシック版と呼ぶものと、2022年に開発したリニューアル版と呼ぶものとがあります。
Swiftを使っているリニューアル版とは異なり、クラシック版ではObjective-Cを使っています。
そこで、リニューアルチームからクラシックチームに移ってくるメンバーを対象に、勉強会を開催することで技術的背景のキャッチアップをはかることを目的にしました。
意識したこと
前述のように、勉強会の参加メンバーはSwiftを書いています。
そこで、ゼロから教えるのではなく、Swiftとの差分や、Swiftだったらどの構文が近いのか、などなど、Objective-CについてSwiftを基準として話すことで、参加メンバーがこれまで担当してきた仕事で得た知見をもとに理解しやすくなるように意識してみました。
実際に話してみた内容
基礎的な構文以外のことを一部紹介しますと、以下のようなことを話しました!
SPIDERPLUS特有のコーディングルールについては、
- intとNSIntegerがあるがSPIDERPLUSの開発ではなぜNSIntegerを採用しているか
- 定数のプレフィックスにはなんでkをつける慣習があるのか
Swiftとの差分については、
- Objective-Cにはmapなどのコレクションがない
for-in
やenumerateObjectsUsingBlock:
などで対応する必要がある
- Block構文はSwiftでのClosure
- Objective-Cのメソッド宣言で-/+をつけるが、それがSwiftだと何に当たるのか
- マイナス(-)記号ではじまるものは「インスタンスメソッド」
- Swiftでは
func
で定義されるメソッド
- Swiftでは
- プラス(+)記号で始まるのは「クラスメソッド」
- Swiftでは
static func
で定義されるメソッド
- Swiftでは
- マイナス(-)記号ではじまるものは「インスタンスメソッド」
// Objective-C - (戻り値の型)関数名:(第1引数の型)第1引数 第2引数ラベル:(第2引数の型)第2引数 { ... } // Swift func 関数名(第1引数の外部の名 第1引数の内部の名前: 第1引数の型, 第2引数の外部の名前 第2引数の内部の名前: 第2引数の型) -> (戻り値の型) { ... }
- Objective-Cにおける.h/.mはSwiftだと何に当たるのか
- Objective-Cでは、クラス外に公開する変数やメソッドは.hに記載し、実装は.mで行う。privateな変数やメソッドに関しては.hに記載しない。
- Swiftでは、アクセス修飾子(public/protected/privateなど)で公開範囲をコントロールする。
実際にやってみてどうだったか
自分自身にとってもとても学びが多い勉強会になりました!
具体的には、Objective-Cに対しての今の自分の理解度がわかったことが一番大きかったです。
それによって、よりObjective-CからSwiftへのリプレイスのイメージが湧くようになりました!
特にSPIDERPLUSコーディング規約などの説明をするときには歴史的経緯を踏まえた上での事情などを、同じチームのエンジニアに補足してもらいました。
入社間もないこともあり、助かったと思うと同時に私自身とても勉強になりました。
また今回勉強会前と終わった後にアンケートを配り忘れてしまっててw
フィードバックをもらう機会だったり、今回の勉強会の参加メンバーのレベル感だったりを詳しく把握できていなかったっていうのが反省点ですね。
なので次からは「ただやるだけ」→ 「次につながるような勉強会」にしたいなって思っています!
今後やっていきたいこと
直近ちょっとやってみたいなと思っているのはSwift6だったりiOS18のキャッチアップ会を開いて
プロダクトに活かせそうなところを伝えていけるといいなと思っています。
またそれ以外にもTech Talkのような興味のある技術的な話題をみんなで話す会などもやりたいなって思っています!!
最後に
スパイダープラスでは仲間を募集中です。
スパイダープラスにちょっと興味が出てきたなという方がいらっしゃったらお気軽にご連絡ください。