Nexta Tech Blog
😽

C#未経験エンジニアがジョイン後にC#をキャッチアップするまで

2024/12/02に公開2

はじめに

はじめまして。ネクスタの武田です。
ネクスタは「スマートF」という生産管理SaaSの開発・販売を行っており、開発言語としてC#を採用しています。

私は2024年7月にC#未経験のエンジニアとしてジョインしました。
それまでのキャリアではC#に触れたことがなく、少なからず不安がありましたが、会社のビジョン、プロダクトの可能性に惹かれ、新しい挑戦に飛び込みました。

今回は、C#のキャッチアップに向けて行ったこと、大変だったことや今挑戦していることをお話しし、同じように未経験から新しい言語に挑戦しようとしている方の参考になればと思います。

私の開発歴のおさらい

まず簡単に私の開発経験を振り返ります。
私は前職に新卒入社し、医療施設・介護事業所をつなぐ情報共有サービスの開発担当をしておりました。

基本的にデザイナーがモックアップを作成後、それをもとにフロントエンドとバックエンド両方に対応しておりました。
使用したことのある言語は下記の通りです。

  • PHP
    • FuelPHPを用いたAPI開発・保守を担当
    • Laravelも少しだけ経験
  • JavaScript
    • 当時はJQueryを用いていました
    • Reactも少し経験あり
  • Node.js
    • 別プロダクトのバックエンドでAWS Lambdaランタイムとして活用

静的型付言語の経験はほとんどなく、C#の文法や特有の設計に触れるのは初めてでした。

実際のキャッチアップの流れ

1. 開発環境を準備

まずは開発環境を整えました。
Visual Studioのインストールや初期設定を行い、プロジェクトのコードをクローンしてデバッグができる状態を目指しました。
最初は使い慣れたVS Codeとは操作感が異なり戸惑いましたが、Visual Studioには多くの便利な機能があり、徐々に効率が上がりました。

2. プロダクトのコードをデバッグ

次に、実際のプロダクトコードを読み、流れを理解することに注力しました。
言語が違うことによる記述方法が異なる部分はもちろんありますが、
オブジェクト思考やMVCといった概念はPHPやJSで身に着けていたため、
コードを読むことはでき、何をやっているのかを理解することはできました。
そのため、あえて文法自体を一から勉強するということはやっておりません。

3. 不明点の解消

不明な文法や記述に遭遇した場合は、自分で調べたり、チームメンバーに相談することで解消しました。
チームが「質問しやすい雰囲気」であることは非常に助けになりました。
完璧に理解したとは言えませんが、1カ月ほどで少し身に付いた実感があります。

大変だったこと

C#をキャッチアップする中で苦労した点をいくつか挙げます。

1. ディレクトリ構造の把握に時間がかかった

PHPやJavaScriptのフレームワーク(例: LaravelやReactなど)では、ディレクトリ構造が事前に決められているため、どのファイルをどこに配置するかが比較的わかりやすいのが特徴です。

一方、C#プロジェクトでは、事前に決められているものではないため、最初は「どこに何を配置すればよいか」や「関連するファイルがどこにあるか」を把握するのに時間がかかりました。
ただし、慣れてくるとディレクトリ構造もロジックに沿って整理されていることに気づき、自分でコードを追加する際にも自然と適切な場所を選べるようになりました。

2. Windowsフォームのプロパティ設定やイベントの定義に苦戦

C#のWindowsフォームでは、UIのプロパティ設定やイベントの定義が初見では特に難しく感じました。
例えば、デザイナー画面でドラッグ&ドロップでUIを配置できるのは便利ですが、プロパティウィンドウで細かい設定を調整したり、イベントハンドラーを手動で追加したりする必要があります。
この操作に慣れるまでは、「どのプロパティを変更すれば目的の動作になるのか」や「どのイベントを使うべきか」を把握するのに時間がかかりました。

また、コードとデザイナーの設定がどのように関連しているかを理解するのも初めての経験でした。特に、JavaScriptやPHPのようにコードベースでUIを定義する経験が中心だった私にとっては、このデザイナー中心のワークフローは新鮮である一方、独特な学びが必要でした。

3. C#特有のアトリビュートの理解に苦戦

C#特有のアトリビュートの概念も、初見では理解が難しかった点の一つです。
例えば、コードの上部に [Serializable][Required]のような記述があると、「これは何をしているのか」「どのように機能しているのか」がすぐには掴めませんでした。

最近のPHPでも対応できるようにはなりましたが、私は最新版を使っていたわけではないため、似たような機能を関数やコメントで表現することが多く、C#のアトリビュートがメタデータとして動作に影響を与える仕組みを理解するまでに少し時間がかかりました。

特に、カスタムアトリビュートを使った例を読んだ際には、「このアトリビュートはどこで処理されるのか」「どうやってアプリケーションの挙動に影響を与えるのか」を追うのに苦労しました。しかし、調べていく中で、アトリビュートがコードの意図を明確にする強力なツールであることを理解しました。
今では、アトリビュートを活用することでコードがより簡潔で読みやすくなる利点を感じています。

今チャレンジしていること

現在、私たちは「スマートF」をWeb化するプロジェクトに取り組んでいます。
この過程で、Blazorというフレームワークを採用しました。
Blazorを選択した理由については別記事に詳しく記載していますが、私にとっては「C#を使ったWeb開発」が新しい挑戦になっています。
BlazorはC#でUIとロジックを統合的に記述できる点が魅力で、これから多くの可能性を秘めた技術だと感じています。

最後に

C#未経験からのキャッチアップは、戸惑いや苦労もありましたが、新しい知識や技術を学ぶ楽しさを再発見する良い機会になりました。

私のように静的型付け言語の経験がなくとも、これまで培った他の技術や知識を活かせば十分に対応可能です。
もちろん、JavaやTypeScriptなど経験のある方はスムーズに開発できると思います。
ちなみにネクスタではエンジニアを募集中です。
興味がある方はぜひ一緒に挑戦してみませんか?

Nexta Tech Blog
Nexta Tech Blog

Discussion

いぬいぬいぬいぬ

C#特有のアトリビュートの理解に苦戦

「C#特有」とありますが、同様の文法・言語機能は他の言語にもデコレータやアノテーションという名前で存在します。

・Annotation: Java, Kotlin
・Attribute: C#, PHP, C++, Rust
・Decorator: Python, TypeScript
・Metadata: Dart

どちらかといえばプログラミング言語によくある一般的な機能かと思います。
むしろ他の言語ではC#のoverrideをこれで実現しているものもある(Java/Dart)ので、C#よりも広く使われていたりします。

yuticayutica

コメントありがとうございます!
知識不足でした。ご教授ありがとうございます!