以下の図のようにRedmineからjson形式でデータをエクスポートし、Backlogにインポートするツールです。ファイルに出力しているのかというとBacklogにインポートする部分を独立して動かすことができれば、Redmineからの移行以外にも様々な用途に利用できるためです。今回のブログでは、Backlogにインポートする部分をモジュール化する時に2点ハマったところがあったので、問題点と解決方法を紹介したいと思います。Importer」からご利用いただけます。通常なら大変な移行も簡単に移行できますので是非ご利用ください。*Backlogのインポートモジュールを使用してBacklogのプロジェクトを別のスペースに移動するツールも開発されています。こちらも是非ご利用ください。問題点としては次の2点がありました。私はBacklogにインポートする部分をモジュール化するために、全く別のプロジェクトとして開発することにしました。いうsbtの機能で自作ライブラリ化して利用するように考えていました。この方法はRedmineからの移行ツールの開発という意味では非常に開発効率が悪かったのです。する必要があり、開発をスムーズに進めることができませんでした。(publishLocalはプロジェクトのビルドが走るため遅い)プロジェクト構成(改善前)(解決方法)マルチプロジェクト・ビルドを使うこの問題についてはマルチプロジェクト・ビルドを使うことで解決することができました。マルチプロジェクト・ビルドとは通常のプロジェクトの中に複数のサブプロジェクトを入れておきビルドするというものです。共通の設定(例えばバージョンやライブラリ)を複数のサブプロジェクトに同時に適用できたり、依存関係を整理したりするのに役に立ちます。私は、マルチプロジェクト・ビルドを使うことでモジュールをさらに細かく次の図のように4つに分割しました。この構成にすることによって開発時は1つのプロジェクトの中でRedmineのエクスポートモジュールとBacklogのインポートモジュールを同時に修正できるようになり非常に開発効率は上がりました。恩恵は開発効率だけではなく、Redmineモジュールとエクスポートモジュール、Backlogモジュールとインポートモジュールを分割することでモジュールの結合度を弱めることができ保守性や読みやすさ再利用性を改善することができました。exporter)上記のようにimporterプロジェクトのdependsOnメソッドにbacklogプロジェクトを渡すことで、importerプロジェクトがbacklogプロジェクトに依存するという依存関係を作ることができます。これにより上記の図のプロジェクト構成通りの依存関係を作ることができます。マルチプロジェクト・ビルドについてさらに知りたい方はこちらが公式ドキュメントになりますので参照ください。http://www.scala-sbt.org/0.13/docs/ja/Multi-Project.html必要のないプログラムが参照できてしまうさて、ここまでくればだいぶ綺麗になったような気がしますが、まだ問題に感じているところがありました。次の図のようにrootプロジェクトはimporterプロジェクトに依存するため、rootプロジェクトは全く参照する必要のないプログラムも参照できてしまいます。これでは保守する人が違う場合に、誤ってプログラミングする可能性があります。rootプロジェクトが本来必要なのはimporterプロジェクトの起動プログラムのみになりますので、どうにかその参照だけにしたいところです。(解決方法)限定子を使う「必要のないモジュールが参照できてしまう問題」については限定子を使うことで解決できました。Scalaではアクセス修飾子の他に限定子というものを使用することでより詳細なアクセス権限を設定することができます。classやobject、関数の前に次のように指定します。Xにはパッケージ、クラス、シングルトンオブジェクトを指定できこの範囲がアクセス可能な範囲と設定できます。{}パッケージにより指定範囲まで公開できるという方法を使用し次のように実装しました。IssueService()//ここがエラーになりますissue.add()}}これで上記の図を次の図のように変えることができました。importerというパッケージでスコープを作り起動プログラムのみを公開することでrootプロジェクトからは起動プログラムのみが参照できるようになっています。まとめ次の2点の問題について解決方法を紹介しました。限定子を使うモジューラブルに作ることで、機能追加がしやすかったり、バグが入りにくかったり、元々の開発者の意図を理解しやすかったりしますので是非お試しください。Reserved.EnglishEnglish。