投稿日:
2018年10月2日
最終更新日:
【遊び心満載】SpringBootの起動時の出力を任意の画像やアイコンに差し替える機能が面白い【謎の技術】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
見慣れぬ新機能
先日、とある案件で「Spring Boot」を使いたいという相談を受けていたため、ドキュメントや様々な技術ブログを漁っていたところ、面白そうな記述を見つけました。
英語スキル雑魚の筆者は、とりあえずGoogle翻訳に全文コピペし概要を確認してみました。
英文:
You can now use image files to render ASCII art banners. Drop a banner.gif, banner.jpg or banner.png file into src/main/resources to have it automatically converted into ASCI
訳:
イメージファイルを使用してASCIIアートバナーをレンダリングできるようになりました。 banner.gif、banner.jpg、banner.pngファイルをsrc/main/resourcesにハイツすれば、自動的にASCIIに変換されます
こんぐらい自分で訳せよ!!
っていう満場一致の指摘は置いとくとして、なにやらシステム起動時のログに表示されるログを任意の画像に差し替えれるようになったよ!と言う事らしいですね。
こういう本来の目的と全く関係のない遊び心は筆者は大好物なので調査そっちのけで早速調べる事にしました☆w
ちなみにSpring Boot自体はとても使いやすいフレームワークです。
Javaであれば一番浸透していますし、まだまだ進化を遂げているのでオススメです!
筆者も大好きです♪
手順
まずは標準出力
まずは通常の起動ログを確認してみましょう。
以下のコマンドを実行してください。
1 |
./gradlew bootrun
|
すると、以下のようなログが出力されると思います。
デフォルトでは制作元であるSpringのロゴが表示されます。
では、早速この出力部分を変えてみましょう。
作業はとても簡単です。src/main/resourcesディレクトリ
に出力させたい画像をbanner.png
という名称で配置するだけです。
配置後の構造はこんな感じ。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ ├── java
│ │ └── jp
│ │ └── blogenist
│ │ └── app
│ │ └── AppApplication.java
│ └── resources
│ ├── application.properties
│ └── banner.png
└── test
└── java
└── jp
└── blogenist
└── app
└── AppApplicationTests.java
|
この状態でもう一度実行してみてください。
1 |
./gradlew bootrun
|
おぉ!変わった!!
画像を配置するだけで自動生成してくれるんですね。
カラー出力したい
しかし、人間は欲深き生き物です。
自動生成しただけでは飽き足らずにカラー出力したい・・・!と思ってしまいました。
しかし、SpringBootさんは抜かりないです。
その場合は以下の設定をapplication.properties
に追加してください。
1 |
spring.output.ansi.enabled=always
|
application.yml
の場合は以下。
1
2
3
4
|
spring:
output:
ansi:
enabled: always
|
カラーきた!!
しかし、ところどころ崩れているのが気に食わん。。。orz
テキストでより細かく設定
画像での出力だと、自動生成なので精密さに限界があります。
なので、細部までこだわりたい場合にはテキストファイルを作成して配置する事で自動生成では不可能な設定が可能になります。
ソースを見てみると、SpringBootのorg.springframework.boot.ansiパッケージ
内に以下のEnum
があり、この値をテキストファイル内で${AnsiColor.RED}
のように指定する事で様々な色を指定する事が可能になるとの事。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
.
.
.
package org.springframework.boot.ansi;
.
.
.
public enum AnsiColor implements AnsiElement {
DEFAULT("39"),
BLACK("30"),
RED("31"),
GREEN("32"),
YELLOW("33"),
BLUE("34"),
MAGENTA("35"),
CYAN("36"),
WHITE("37"),
BRIGHT_BLACK("90"),
BRIGHT_RED("91"),
BRIGHT_GREEN("92"),
BRIGHT_YELLOW("93"),
BRIGHT_BLUE("94"),
BRIGHT_MAGENTA("95"),
BRIGHT_CYAN("96"),
BRIGHT_WHITE("97");
.
.
.
}
|
なるほど。
とりあえず試してみましょう。
以下のテキストを配置してみます。
1
2
3
4
|
${AnsiColor.RED}█RED█
${AnsiColor.BLUE}█BLUE█
${AnsiColor.GREEN}█GREEN█${AnsiColor.BRIGHT_GREEN}█BRIGHT_GREEN█
${AnsiColor.YELLOW}█YELLOW█${AnsiColor.BRIGHT_YELLOW}█BRIGHT_YELLOW█
|
そして実行。
良い感じ♪
ちなみにテキストの最初に空行を入れないと、出力が崩れる事があるので、何行か空行を入れといたほうが良いかもしれません。
この辺は要調整ですね。
では、実際に先ほど使用したbanner.pngを削除してbanner.txtに置き換えましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
${AnsiColor.GREEN}::::::
${AnsiColor.GREEN}::::::::: ${AnsiColor.BRIGHT_BLACK}#
${AnsiColor.GREEN}:::::::::o ${AnsiColor.BRIGHT_BLACK}#####
${AnsiColor.GREEN}o::::::::: ${AnsiColor.BRIGHT_BLACK}#########
${AnsiColor.GREEN}o:::::: ${AnsiColor.BRIGHT_BLACK}#############
${AnsiColor.RED}# : ${AnsiColor.BRIGHT_BLACK}################
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}################
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}###############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}#############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}#############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}##############################
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}##############################
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}#############################
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}############################
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}##########################
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}#############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}#############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}###########
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}##########
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}##########
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}##########
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}###########
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}### ${AnsiColor.BRIGHT_BLACK}#############
${AnsiColor.RED}# ###### ${AnsiColor.BRIGHT_BLACK}####################################
${AnsiColor.RED}######### ${AnsiColor.BRIGHT_BLACK}####################################
${AnsiColor.RED}######### ${AnsiColor.BRIGHT_BLACK}####################################
${AnsiColor.RED}######### ${AnsiColor.BRIGHT_BLACK}###################################
${AnsiColor.BLUE}##########
${AnsiColor.BLUE}########
${AnsiColor.BLUE}######
${AnsiColor.BLUE}####
${AnsiColor.BLUE}#
|
実行するとこんな感じ。
とても良い感じになりましたね♪
終わりに
実際の開発には直接は関係のないところですが、社内パッケージを作っている場合にはこういう部分にブランドロゴを埋め込むのも良いと思います♪
もちろん個人開発時の遊び心としても面白いので、余裕がある方はぜひ試してみてください♪