サーバサイド担当からクライアント技術者に転身する際の注意点

2014年12月27日に投稿 → に更新

WebサイトはAjaxの大ブレイク以降、凝ったクライアント処理を作りこんでいるサイトがうんと増えてフロントエンドエンジニアという職業が生まれました。

スマートフォンのアプリやゲームの開発需要増加によってもクライアントサイドのエンジニア求人は増加しています。

「ずっとサーバサイドをやってたけど、クライアント側もやってみたいなぁ。でも、出来るかなぁ?」 という方も多いかと思います。

私はエンジニアキャリアの前半はずっとサーバサイドエンジニア(Java)をやっていました。

その後、AjaxやHTML5を使ったフロントエンド開発を経験し、今はスマートフォンのゲーム開発(Unity、C#)をやっています。

やってみて感じたのはクライアント側にはサーバサイドにはない難しさ、複雑さがあるということです。そしてもちろん面白さもありました。

そんな経験を踏まえて「サーバサイド技術者がクライアント技術者にコンバートする際の注意点」を紹介します。

1. 処理が始まるタイミングが一つじゃない

サーバの場合処理が始まるタイミングは一つでリクエストがあったらレスポンスを返すだけですが、クライアントの場合

  • ボタンを押された時
  • アニメーションが終わった時
  • 通信が終わった時
  • スクロールされた時

等、処理が始まるタイミングが複数あります。

2. 同期と非同期を使い分ける場面が多い

サーバの場合、通常はマルチスレッド・ブロッキングIO(同期IO)なので、基本的に同期処理になります。

同期処理はコードが上から下へ順番に実行されていくので分かりやすいのですが非同期処理は上から下へ実行していく過程で非同期な部分を読み飛ばして次の処理に行ってしまいます。

非同期な処理の結果が返ってきたところでコールバック関数が呼ばれるので、コードを読む際にどういう順番で実行されるかを強く意識する必要があります。

ブラウザ上で動かすJavaScriptやUnityでサーバー通信する場合も非同期IOです。

クライアント側って通信してる間も画面の描画を続けなければならないので非同期IOの方が都合がいいためです。

3. タイミングに依存するバグが多い

クライアントには処理が始まるタイミングが複数あり、非同期処理も多数使われるため、タイミングに依存するバグが多くなります。

「このバグ原因が分からないなぁ?」としばし頭を悩ませた結果、原因が「そっかぁ、ここが非同期だから、この処理が終わる前にここに来てしまうのかぁ」ということがよくあります。

しかも、この手のバグは原因が分かりずらいので厄介です。ちょっとしたタイミングの差で起きたり起きなかったりするので、解析が難しいんです。

4. 長い生存期間の変数が多い

クライアント側はサーバ側よりも状態を持つ変数が多いので、長い生存期間の変数が多くなります。

サーバの場合、状態はセッション属性かDBに持たせますが、クライアントの場合、メモリー上かファイルに持たせます(ほとんどはメモリーに持たせることが多い)。

それに、その状態の変化も(特にゲームの場合)激しく頻繁に更新し続けます。ですから、変数の状態に依存するバグも発生しやすくなります。

変数のスコープ・生存期間は出来る限り小さくしましょう」というのはプログラミングの鉄則ですが、クライアントの場合、状態管理の必要性から長い生存期間の変数が多くなってしまうんです。

5. ロジックの結果を表示に反映させる必要がある

サーバのアウトプットはリクエスト属性やJSON項目にセットするだけですし、自分で項目名や構造を決められますが、クライアントのアウトプット先は画面なのでUIのAPIにアウトプットします。

UIのAPIを調べる必要がありますし、表示というものはタイミングにとても敏感なので、もう少し、ほんの0.3秒後に表示した方が良い等の細かい調整が必要となる場面が多くあります。

ロジック的には正しくても演出的にはNGという場合が多々あるんです。

6. 動作する端末のシステムリソースが小さい

サーバに比べるとクライアント端末のシステムリソースはとても小さくなります。

サーバの端末がサーバ用PCやワークステーションであるのに対し、クライアントの端末はスマホのアプリやブラウザだからです。

よって、CPUやメモリー等のシステムリソースの消費を出来るだけ小さくする工夫が必要になります。

特にメモリーリークでアプリが落ちるという現象が起きやすいのでとりわけメモリーの消費量には注意が必要です。

逆にサーバにあってクライアントにないものは?

1. 負荷分散、スケーラビリティ

負荷分散やスケーラビリティをクライアント側で考慮する必要はありません。

クライアントの端末を多重化するなんてことはあり得ないので負荷分散、スケーラビリティを考える必要はありません。

ただし、複数コアのCPUやGPUの処理効率を上げて性能を引き出す必要はあるので、並列処理の知識が必要になります。とはいえ、その辺はフレームワークやゲームエンジンなどのローレベルレイヤーのソフトウェアがやってくれるので、アプリケーション開発においては、そこまで意識しなくてもいいかもしれません。

2. DBアクセス

クライアント側ではファイルIOやSQLiteのような簡易DBアクセスはあるにせよ、リモートにある何100万件もレコードの入ってるDBに直接アクセスすることは通常ありません。

なので、DBのパフォーマンスを考えたSQLを書くスキルは必要ありません。

複雑でしんどい面もあるけど見た目が楽しいのがクライアントプログラム

サーバ側とクライアント側、両方をやってみた私個人の感想としては、クライアントプログラムの方がロジック的に難しいものが多い印象です。

やってて「しんどいなぁ」とか、「サーバサイドの方がシンプルで分かりやすかったなぁ」なんて思うことがよくあります。とはいえ、やってやれないほど難しいわけではありません。要は慣れの問題です。おそらくクライアントサイドのエンジニアがサーバーサイドに転身する場合も同じように難しさを感じるのだと思います。

両方やってみると、プログラミングに対する考え方も広がるので、エンジニアとして上を目指すという意味でも、とてもいいことです。

一番早くスキルを身につける方法は仕事でクライアントサイド担当になることです。

私の場合、初めは趣味でUnityを使ったゲーム開発をしていましたが、仕事でゲーム開発プロジェクトに入ってからのほうがずっと早く上達しました。

ですから、スキルアップのための転職というのはとてもいい選択だと思います。今なら、転職を支援する仕組みもたくさんあるので、気軽にトライしてみるといいと思います。

転職活動はやってみるとかんたん!

私自身3回ほど転職してるんですが、思ってたよりかんたんで、転職エージェントを使ったらあっという間でした。

エージェントが応募先候補の選出から、面接の日程調整までやってくれるので、こちらから動かなくても半分くらい自動的に進む感じで楽でした。しかも今は好景気で売り手市場なので転職するのにちょうど良い時期です。

レバテックキャリアっていうエージェントがおすすめです。

このサービスを運営しているレバレジーズという会社はシステム開発もやっているので、現場の仕事をよくわかってくれてますし、ヒカ☆ラボというIT系の勉強会なども主催していたりteratailというプログラマー専用の質問サイトを運営してて好感が持てます。求人案件もWebやスマホの面白い仕事が多いのでいいと思います。

あとホームページ見ると分かるんですが、若くて美人の担当者が多いのもナイスなんです!私の場合(たぶんあなたも)、担当者が美人だと転職活動のモチベーションめちゃ上がりますからね笑

なので、レバテックキャリアのホームページ見てみてください。「ホントだ、美人じゃん♪」ってきっと思うはずです笑

職務経歴書の作り方がわからないという方は、私の使っているテンプレートを使ってみて下さい。

地方在住の人にも使える転職エージェントがある!

レバテックキャリアは東京・大阪近郊向けサービスなので、地方在住の方には全国の求人を扱っているワークポートがおすすめです。利用者の評判がめっちゃいいのでホームページ是非見てみてください。

人脈がなくてもフリーランスになれる!

フリーランスになりたい方にはギークスジョブがおすすめです。人脈がなくてもギークスジョブに登録するだけで案件を紹介してもらえます。案件の希望(どんな技術を使っているか、残業が少ないこと)等も聞いてくれるので、やりたい仕事が出来ます。対象地域は東京・大阪・名古屋・福岡近郊です。

「派遣社員」なら正社員とフリーランスのいいどこ取り!

フリーランスになりたいけど、確定申告とかめんどくさいなという方には派遣社員がおすすめです。

派遣ってネガティブなイメージありますが、ITエンジニアの派遣社員ならやりたい仕事を選べて、給料も悪くないですし、確定申告や年金、健康保険も派遣会社が入ってくれるのでいいと思います。

私の先輩でフリーランスになった後、派遣社員になった人がいるんですが「自由かつ煩わしい手続きがなくて最高」って言ってました!リクルートITスタッフィングに登録するだけでかんたんに派遣社員になれます。

私(やまろう)への相談メールも募集中

転職や仕事術、勉強法等について質問や相談がありましたら、以下のメールフォームからぜひご連絡ください。
経験者ならかんたんに解決できる相談って多いのでお気軽にどうぞ!こう書いてもなかなかメールくれる人って少ないのでホント気軽にメールしてくれると嬉しいです。

メールアドレス (必須)

相談内容

たまに間違ったメールアドレスを入力されていて返信できない場合があります。一週間経っても返信がない場合、メールアドレスを確認の上、再度送信をお願いします。

エージェントを使った方が転職活動は楽です

東京・大阪近郊のイケてるIT企業に転職したい人には『レバテックキャリア』

 東京・大阪近郊のエンジニア経験者向け転職サービスです。

このサービスを運営しているレバレジーズという会社はシステム開発もやっているので、現場の仕事をよくわかってくれてますし、ヒカ☆ラボというIT系の勉強会なども主催していたりteratailというプログラマー専用の質問サイトを運営してて好感が持てます。求人案件もWebやスマホの面白い仕事が多いのでいいと思います。

ホームページを見ると分かるんですが、若くて美人の担当者が多いのもナイスなんです!私の場合(たぶんあなたも)、担当者が美人だと転職活動のモチベーションめちゃ上がりますからね笑

エンジニア未経験の方や地方在住の方にはワークポートというエージェントをおすすめします。

エンジニア未経験の方や地方在住の方には『ワークポート』

全国の求人を扱っていて、しかもITエンジニア未経験の人にも転職支援をしてくれるエージェントです。

未経験の人はサポート対象外のエージェントが多い中、ワークポートは未経験者を支援し転職を成功させています。

未経験の方こそエージェントから職務経歴書の作り方や面接の仕方のレクチャーを受けた方がずっとうまくいきます。

『派遣社員』なら正社員とフリーランスの『良いとこ取り』!

  • 「フリーランスになりたいけど、確定申告とかめんどくさいな」
  • 「定時帰りできる職場や、時短勤務がしたい」

という方には派遣社員がおすすめです。

派遣ってネガティブなイメージありますが、ITエンジニアの派遣社員なら

  • 時給が高く、給料も悪くない
  • やりたい仕事を選べる
  • 確定申告不要(派遣会社がやってくれる)
  • 厚生年金、健康保険も派遣会社が入ってくれる

ので、正社員とフリーランスのいいとこ取りな、とてもいい選択なんです。

 - 技術