アイデアで打開!コードだけでないプログラミングの世界

プロフィール画像

Hideki Ikemoto

2024年05月29日

リンクをコピーXでシェアするfacebookでシェアする

※当記事は2023年7月に執筆した記事で、情報は当時のものになります。

はじめに

現在、自分は様々なチームから技術的な相談を受けています。その多くは技術的な手段で解決しますが、ときには技術でなくアイデアで解決するケースもあります。先日、アイデアで問題を解決した話を書きます。

ちなみにタイトルはChatGPTくんに考えてもらいました。タイトル考えるの苦手なので助かります。

相談内容

今回は次のような内容の相談を受けました(口調は変えてます)。もちろん依頼者も事前に調べたのですが、解決案が見つからなかったようです。

Apache POIOpen in new tab (MS Officeファイルを扱うJavaのライブラリ) を使ってPowerPointファイルの加工をしている。

そのPowerPointファイルに1枚の白い画像がスライドいっぱいに貼り付けているが、画像を貼り付けると右下のページ番号が見えなくなってしまう。これは何とかならないか。

完成イメージを共有する

まず、完成イメージを共有することから始めました。手作業で作成したPowerPointファイルを使用し、画像を最背面に移動してページ番号が見えるようにしたものを依頼者に提示しました。この内容で依頼者と合意しました。

画像を最背面に移動することでページ番号が見えている
画像を最背面に移動することでページ番号が見えている

解決方針を考える

次に解決方針を考えます。今回は過去の経験や知識をもとに、次のように考えました。

  • MS Officeファイルの編集にApache POIOpen in new tabを使うのは定番。他の言語を含め、他のオープンソースライブラリでのサポートはあまり期待できなさそう。
  • ただし、LibreOfficeOpen in new tabの開発は活発なので、そちらから解決案が得られるかもしれない。
  • Apache POIはExcelの操作は充実しているが、Excel以外のファイルサポートは劣っている印象がある(過去にWordファイルの操作を行ったときに対応していない機能があった)。
  • 現在のMS OfficeファイルはXMLベース(Office Open XML)のため、最悪XMLで操作すれば何とかなりそう。

なので今回は「まずApache POIで試してみよう。ただし対応していない可能性も高いため、あまり深入りはしないようにしよう」と考えました。

サンプルコードを作る

「まずApache POIで試してみよう」ということで、非常に小さなサンプルコードを作りました。処理はわずかこれだけです。Gradleの設定に手間取りましたが、1時間ほどで完成しました。

  1. 既存のPowerPointファイルをオープンする
  2. 画像を貼り付ける
  3. ファイルを別名で保存する

解決案を探したが見つからず・・・

次に解決案を主に3つの方法で探しました。

  • Google検索
  • Apache POIの公式サイトのドキュメント
  • Apache POIのリリースドキュメント

依頼者が既に自分で調査した上での技術相談でしたので、予想通りはっきりとした答えは見つからず。一番近いのは次のStack Overflowの解答ですが、Apache POIの内部APIを直接呼び出してXMLを操作する内容だったので、解決案としては微妙かなと考えました。

Apache POI - change shape order in pptxI can't seem to find the following feature in the POI Open in new tabdocumenstackoverflow.com

アイデアで問題解決!

この時点で一次回答をしようと考えたのですが、そのときに1つアイデアが思いつきました。完成イメージはグレーの画像を使ったのですが、実際に依頼者が貼る画像は真っ白です。そこで、透明にすればページ番号が見えるのでは?と考えました。

具体的にはこのような感じです。グレーの画像なので右下だけ切り取ると不自然になりますが、白い画像なら自然に見えるのではないかと。

そして依頼者にこのアイデアも含めて一次回答を行いました。そうしたらなんと・・・この画像の背景透過でOKが出たそうです。

おわりに

今回のように、アイデアだけで解決する事例はとても稀です。多くの場合、技術的な解決案やコードによるアプローチが採用されますが、エンジニアは何でも技術だけで解決したいとは限りません。そこで、「見積もりをお願いします」という前に、一緒に相談できる相手としてエンジニアを頼ってもらえればと思います。

この記事を書いた人

Hideki Ikemoto
Hideki Ikemoto
2002年以来バックエンドを中心としたキャリアを積み、2019年に株式会社メンバーズエッジ(当時)に中途入社。入社後はリードエンジニアとしてPython/Djangoを使った案件に携わり、現在は様々なチームへの技術支援を行っている。Scrum Alliance認定スクラムデベロッパー(CSD®)。
ページトップへ戻る