こんにちは!第一開発部でエンジニアとしてインターンをしていた三宅(@pure_notchman)です。PR TIMESのインターンを卒業することになったため、これまで取り組んできた開発や学びについて振り返りたいと思います。
はじめに
PR TIMESのインターンでは、実際のプロダクトや社内業務に直接影響する開発に携わることができました。いわゆる「練習用のタスク」ではなく、日々の運用やユーザー体験に関わる機能を任せてもらえたのが印象的です。私が取り組んだ主なタスクは以下の通りです。
- FAX送信業務の自動化APIの開発
- レガシーコードのリファクタリング
主に取り組んだこと
ここでは、特に印象に残っているタスクについて紹介します。
FAX送信の自動化
PR TIMESでは、プレスリリース配信には多様な届け先や運用形態があり、その一つとしてFAX配信があります。このFAXの送信作業は一部手動で行われており、運用負荷の軽減に向けて、自動化のニーズがありました。

そこで私は、以下のような制約の中でFAX送信を自動化する仕組みの開発に取り組みました。
- コンパイル済みバイナリとヘッダーファイルのみが公開されているベンダー製のCライブラリを使う
- Windows環境に依存した実行基盤
- 文字コードの取り扱い
これらの制約を踏まえ、CGIとして動作するHTTP APIを設計・実装しました。
大量のFAXを自動送信するケースはそれほど一般的ではなく、ベンダー仕様や環境依存の挙動など、想定外の課題に直面することも多々ありましたが、試行錯誤を重ねながら最終的にリリースまで持っていくことができました。
このタスクを通じて、ビジネス上の重要性が高く、かつ技術的な難易度もある機能を実装・リリースする経験を得ることができたのは大きな収穫でした。
レガシーコードの改善
レガシーコードの改善タスクでは、デッドコードの削除やライブラリのバージョンアップ関連のタスクを行いました。自分は特にPHPのバージョンアップに直接関わるいくつかの大きなライブラリのバージョンアップ作業を行いました。
過去の開発者ブログでも触れられている通り、PR TIMESでは長く使われている技術スタックも多く存在します。例えば、Smartyのバージョンアップでは、
- 影響範囲が広く、長年手が付けられていなかった
- 独自拡張や用途が不明なプラグインが存在していた
- 全体としてメンテナンス性が低下していた
といった課題がありました。
https://developers.prtimes.com/2023/03/31/intern-upgrade-smarty/
実際に開発をしていて感じたのは、
「技術的に正しい」だけではプロダクトは前に進まない
ということです。レガシーコードに手を入れる際には、
- どこまで安全に変更できるか
- どの順序で改善するべきか
- そもそも今やるべきか
といった判断が非常に重要になります。
また、レガシーコードの改善は、影響範囲の調査やテストを繰り返しながらリリースまで持っていく、地道な作業の積み重ねでもあります。特に独自拡張部分については、コードベースを手がかりに「なぜこうなっているのか」を推測しながら修正方針を検討する必要があり、最初はかなり苦戦しました。それでも、uzullaさんをはじめとするチームの方々のアドバイスを受けながら、少しずつ進めていくことができました。
インターンで得た学び
ここからは、インターンを通じて得た学びをいくつか紹介します。
技術だけでは完結しないという気づき
FAX HTTP APIの開発では、「C言語でAPIを書く」という点に技術的な面白さを感じていました。
しかし実際に重要だったのは、
- なぜそれを作るのか
- 誰のどんな課題を解決するのか
という部分でした。FAX送信の自動化も、「技術的に面白いから」ではなく、
「人が手作業で行っている負担の大きい業務を減らす」
という明確な価値があったからこそ成立したものだと感じています。
制約の中で設計する力
特にFAX HTTP APIでは、
- Windows限定の実行環境
- ブラックボックスに近いCライブラリ
- 文字コードの制約
といった前提の中で設計を行う必要がありました。PR TIMESで普段使われている技術スタックとは大きく異なる環境で、どのようにAPIとして成立させるかを考える必要がありました。このような状況では、「理想的な設計」を考えるだけでは不十分で、
- どこまで制御できるのか
- どこを割り切るべきか
- どのように安全性を担保するか
といった現実的な判断が求められます。
この経験を通じて、
「制約があるからこそ設計が必要になる」
ということを実感しました。自由度の高い環境では見えにくい、現実の開発における設計の重要性を学ぶことができたと思います。
プロダクト視点を持つこと
単に機能を実装するだけでなく、
- 運用に乗るか
- 継続的に保守できるか
- チームとして扱いやすいか
といった観点で考えるようになりました。
特に保守性については、自分自身がレガシーコードの修正で苦労した経験があったからこそ、「自分が書いたコードを将来誰かが触るときにどう感じるか」という視点を持つようになりました。このような観点はインターンという立場でもしっかり求められており、非常に良い経験だったと感じています。
さいごに
PR TIMESのインターンとして、およそ4年半お世話になりました。長く関わる中で、組織の変化やサービスの成長、改善の積み重ねを間近で見ることができたのは、とても貴重な経験でした。ここまで現場に深く関わることができるインターンシップは多くないと思っており、その中で技術面だけでなく、プロダクトや組織に対する理解も大きく深めることができました。本当に多くの学びを得ることができた、非常に良い経験だったと感じています。

