【Java】エクセル操作できる「POI」をSpring Boot + Dockerに導入してみた!!(1)

技術

「Apache POI」ライブラリを教えてもらいました

全然知らなかったんですが、JavaでExcelファイルを操作できるらしいです。

副業で開発のお手伝いしているシステムにExcelファイルでデータ入出力する機能を実装する必要があって、「Apache POI」というライブラリを教えてもらいました。

ちなみに Apache POI はExcelだけでなく、WordやPowerPointなどのMicrosoft Office製品も操作できるライブラリだそうです。

聞くところによると、そこそこクセがあるライブラリらしいってことなので、実際に業務で使ってみる前に自分で試してみようと思います。

その前に開発環境を作ります

以前、Docker上でSpring Bootを入れてVSCodeで開発する環境を作りました。

VSCodeとDockerでSpring Boot + PostgreSQL開発環境を作る(1) | Sales8開発者日記

この記事を書いたのはもう3年くらい前なので、今回は改めて環境作りからやってみようと思います。

ちなみに docker バージョンはこんな感じです。

docker -V
> Docker version 20.10.24, build 297e128

今回はDockerfileもなしで、DockerHubからイメージを直接コンテナにすることにしました。

コンテナイメージは OpenJdk の バージョン17です。

openjdk – Official Image | Docker Hub

任意のフォルダでこのコマンドを実行します。

docker run -itd --name poi_sample -v $PWD\src:/usr/src openjdk:17

このコマンドを実行するフォルダには「src」フォルダをあらかじめ用意しておきます。
ソースコードをホストとマウントして、コンテナを停止してもソースコードを参照できるようにするためです。

なので、コンテナから直接gitのようなバージョン管理システムにアクセスしたり、ホストとあえてマウントする必要がないのであれば不要ですね。
その場合のコマンドはこんな感じです。

docker run -itd --name poi_sample openjdk:17

コンテナが無事にできたら、VSCodeのRemote Development拡張から接続します。

Remote Development – Visual Studio Marketplace

コンテナに接続できたら、次は下記のVSCode拡張を“コンテナ内に”インストールします。

これで準備完了です。

Spring Initializrでプロジェクト作成

Spring Boot Extension Pack – Visual Studio Marketplace にはSpring Bootのプロジェクトを簡単に生成できるSpring Initializrというものがついていて、とっても便利です。

まず、Remote Development拡張でコンテナに接続しているVSCode上で開発用のディレクトリを開きます。
私の場合は “docker run” した時にホストとマウントしておいた「/usr/src」ディレクトリを使うことにしました。

ちなみに「Open folder」のショートカットキーは [Ctrl + K → Ctrl + O」です。

開発用ディレクトリが開いたら、次にVSCodeのショートカットキー「Ctrl + Shift + P」でコマンドパレットを開きます。

コマンドパレットに「>Spring Initializr」と入力し、表示された候補の中からSpring Initializr: Create a Gradle Project...というのを選択します。
お好みでSpring Initializr: Create a Maven Project...を選んでもいいです。

あとは順に下記の通りに入力します。

Specify Spring Boot version.3.0.6
Spedify project languageJava
Group Idbiz.systemcraft任意のグループID
Artifact Iddemo任意のアーティファクトID
Specify packaging type.Jar
Specify Java version17
Dependencies・Spring Boot DevTools
・Lombok
・Spring Web
・Thymeleaf
Directory/usr/src/

※Spring Bootバージョン3.0.6はOpenJDKのバージョン17以上が必要です。

これで「/usr/src/demo」にSpring Bootプロジェクトのひな型が作成されています。
再びショートカットキー「Ctrl + K → Ctrol + O」でOpen folderを開いて作成された「/usr/src/demo」へ移動します。

indexページを実装

demoディレクトリ配下に下記のようにファイルを追加します。

  • controllers/IndexController.java
  • resources/templates/index.html

それぞれのファイルの内容は下記のとおりです。

package biz.systemcraft.demo.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class IndexController {
    @RequestMapping({ "/", "/index" })
    public ModelAndView get(ModelAndView mav) {
        mav.setViewName("index");
        return mav;
    }
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
  <head>
    <title>Demoアプリケーション</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <h1>Hello world!</h1>
  </body>
</html>

ファイルが作成できたら、VSCodeのDebugビューから実行してみましょう。

「https://localhost:8080」にアクセスしてページが表示されたらOKなんですが・・・

あら?・・・エラーになってしまいました。

とりあえず、VSCodeを一度閉じて開きなおしてから再度実行してみます。

今度はうまくいきました。
プロジェクトを作った直後はThymeleafがtamplatesフォルダにアクセスできないことがあるらしいです。
そんな時はVSCodeを開きなおすと何故かうまくいくことが多いです。

続きは次回

ということで、まずはSpring Bootの開発環境をDocker上に作ることができました。

  1. Docker Hub から OpenJDK のイメージを pull & buildして
  2. VSCode の Remote Development 拡張でコンテナに接続
  3. VSCode の Spring Boot 拡張 を導入して Spring Initializrでプロジェクト作成

基本的にこの3ステップだけで環境ができてしまうので、非常にお手軽です。

Thymeleafがエラーになってページが表示されなくなったところだけ、わからなくて時間を取られてしまいましたけど。
結局よくわからないままVSCodeで開きなおすだけで解決してしまいましたが、それがわかるまでに時間がかかってしまいました。

ということで、今回はひとまずここまでにしたいと思います。

次回はいよいよPOIを導入して、ExcelをJavaで操作するところをやってみようと思います。
POIのクセつよポイントはどのあたりなのか、そのあたりを見ていければいいかなと考えています。

気になる方は是非チェックしてみてください。

コメント

タイトルとURLをコピーしました