理想的な製品と現実の製品のギャップを分析し、改善していく

ソフトウェアエンジニア K

社員インタビュー

現在の仕事内容について教えてください。

製品開発部に所属しソフトウェアエンジニアとして、弊社製品であるFFRI yaraiとFFRI AMCの設計開発作業に携わっています。もう少し細かく言うと、これらの製品に新しい機能を搭載するための開発作業があったり、ユーザー様からの要望に応えるための機能追加作業などを行ったりします。
入社してから現在までで1年半ほどとなりますが、Windows のカーネルモードで動作するドライバーソフトウェアの機能改修作業やエンタープライズ向けの Web アプリケーションの新規機能追加、多数のクライアントからアクセスされるクラウドサーバーの設計や構築など色々と手掛けてきました。 現在は次の製品のバージョンで搭載する機能の実現に向けて、システムや機能の構成を検討したり、動作検証を行うプロジェクトに携わっています。業務では主に、C/C++、PHPを使うことが多く、最近では、速度や安全性、並列性が考慮されて設計されている Rust を導入すべく勉強を進めています。リモートワーク制度が導入されてからは、普段はリモートワークで作業をしています。通勤時間がなくなった分、勉強をしたり、ジムに行ったりと時間を効率的に使えるようになりました。自宅で作業をすることが多いので、家族と接する時間も増えたので子供も喜んでくれています。

入社前と入社後でギャップはありましたか?

今までに経験してこなかった、セキュリティ業界ならではの難しさ

転職時には「自社の製品またはサービスの開発に携われる会社」を希望てしておりました。実際に入社してからは、自社製品開発に携わることができてますので、自分の希望条件とのギャップというのはありません。ただ、これまでのキャリアではWindows環境での開発経験が長かったのですが、実際に入社してセキュリティ製品の開発業務に取り組んでみたところ、Windowsにこんな機能あるんだとか、こんなAPIがあるんだといった具合に、過去の経験や開発領域では知らなかったことが多く出てきて予想以上に苦労しましたね。私の場合、入社時点で37歳だったのですが、一般的にこういった年齢で転職する場合には、即戦力としてすぐに活躍することが求められるものであると思っていまして、自分としても入社してから1~2か月である程度独り立ちしている姿をイメージしていたのですが、思い通りには行きませんでしたね。これまでに経験した開発ではあまり意識してこなかった、セキュリティ関連の様々な技術(脆弱性を作り込まないセキュアな設計・コーディング・権限管理等)や低レイヤーの知識(OS・カーネルランド・ドライバー等)、システムを守るが故に様々なソフトウェアへの影響の考慮が重要になったりと、まさに井の中の蛙大海を知ったという感じでした。周りのメンバーに教えてもらったり、図書館に通っての勉強や海外の文献・論文を確認したりして、半年以上経ったくらいでようやくある程度全体像が把握できるようになりました。

仕事の中でのやりがいは、どういうところにあると思いますか?

理想的な製品と現実の製品のギャップを分析し、改善していく

機能を設計して作りこむ前に、ユーザー様の要望を叶えるための理想的なシステムの姿を描いてみる、ということを心掛けています。理想的な姿というのは簡単にいうと「ぼくのかんがえたさいきょうの○○システム」みたいなもので、使う人にとって最高に都合のよいシステムはどういったものか、というようなことを現実の制約条件を全て無視して考えてみたもののことです。実際のシステム設計においては、サーバーのスペックに限界があるとか、通信負荷には限界があるとか、そういった現実の制約条件に基づいて設計を行うのですが、それらの設計が仕上がってきたくらいのタイミングでこの「さいきょうのシステム」との差を考えてみると、どういう点が理想と離れているのかとか、どういう制約によってその差が生まれているのか、ということについて分析する良い機会になったりするからです。
このように分析することで、ユーザー様にとって使いやすい製品を作るための目標を高く持てるようにしよう、と考えています。ものづくりというのは、色々制約があって理想通りのものが作れないものであるので、継続して改善していくとことが重要だと思っています。そのようにして良くしていった機能は、製品をご利用いただいているユーザー様にとってきっと役に立つはずだと思っていますので、そうなってくれればソフトウェアエンジニアとして冥利に尽きると言いますか、やった甲斐があるなと思います。

今後、どんな方に入ってきてほしいですか?

学び続けることやチームでものづくりを楽しめる人

基本的に、ものづくりをやりたいと思う方にご入社いただくのが一番ではないのかなと思います。あとは、学び続けることが苦で無い方でしょうか。先ほど入社してから色々勉強をしているとお伝えしましたが、私の場合、色々勉強したりするのはそれなりに疲れるので全く苦にならないとまでは言えないのですが、やればできるし、やってみると意外と楽しかったりはします。こういった勉強が必要であるような状況をポジティブに捉えて、ある程度楽しめる方が良いと思います。
また、チームで互いにレビューしたり進捗報告したりしながら進めていくので、人に何かを説明するような機会が多くあります。最近ではリモートワークでの勤務なのでSlackでのコミュニケーションが主体です。内容は自分の仕事状況であったり、どうしてこういう風に設計をしたのかであったり、不具合の解析状況であったりと様々なのですが、こういったものを分かりやすく正確に説明するというところにもそれなりに難しさがあったりします。これは中々独学だけでは磨きにくく、互いにコミュニケーションを取って分かりづらいよとか指摘しあったりしないと成長しにくいものなのですが、自己主張するとか説明するのが苦手でできればやりたくないと感じてしまうようだと、仕事がしづらいかもしれないです。こういった大変さは色々とありますが、それら含めてものづくりの醍醐味だよね、って思える人なら良いなと思います。 

今後の目標について教えてください。

ユーザー様の要望に先んじて役に立つ機能を提案できるようになる

製品開発作業を円滑に行うことが自分が担当すべきタスクなので、それを頑張っていくということが第一目標です。それ以外の目標として、元々自分は入社前にはセキュリティに関する専門知識がなかったので、より良い製品開発のためにセキュリティに関する知識を深めたいと思っています。 今はただ必要な機能を実現するので精一杯ですが、ユーザー様の要望に先んじて役に立つ機能を提案できるようになりたいなと思っています。

1日のスケジュール

ソフトウェアエンジニアKのとある一日

  9:00娘の幼稚園のバス停まで送る。周りの奥様方と会話するときにぎこちなくならないよう気をつける。

10:00自宅で業務開始。テストで見つかった不具合動作の原因について解析。Redmineに直接原因、根本原因などの解析結果を投稿。

12:00お昼休憩。スーパーで買ったピザを焼いて食べるのが最近のお気に入り。

13:00不具合の修正方針についてRedmineに投稿。方針で迷ったらリーダーに相談する。

15:00修正を行ったバージョンで動作確認を行い、GitHubに投稿してレビューを依頼する。

16:00チームメンバーとSlackでリモートミーティングを行う。

17:00チームメンバーの依頼を受けて、修正コードレビューを行い、異常ケースの考慮不足等がないかなど確認を行う。

18:30レビューで指摘を受けた点を修正し、再度動作確認を行いGithubに投稿する。

19:00業務終了。ジムに行き、1回あたり500kcalの消費を目指して1時間ほど運動。

pagetop