ターミナル大好きになるために「Ext-ASCII-Art-Splash-Screen-Ja」を作りました
ASCII Artに興味を持ちました。今さらですが。
ターミナルにログインしたら、楽しげなASCII Art出したい!
きっとテンション上がってその日はうまくいくに違いない!
と思いました。(単純バカです)
なのでやってみました。
最初は、先人のリポジトリのコードをそのまま使う予定でしたが、結局色々と改変したらほぼ原型を留めない形になってしまいました。。笑
●前提整理
よくhomebrewとかDockerとか起動したりインストールしたりすると、ASCII Artを出してくれるものありますよね。
人によってはうっとうしく感じるのかもしれないですが、私は大好きです。
ターミナルにログインしたら、ASCII Artを出してくれたら最高!って思いました。
・先人の知恵がないか確認
ASCII Artを出すくらい、先人がなんらかの知見を残してくれてるだろうと思いました。(他力本願。。)
探したら2つ良いツールを発見しました!
まずこちら。「ASCII-Art-Splash-Screen」
たった5行のPythonで実装されています。それだけASCII Artをターミナルに出力するのは簡単ってことですね。。知らなかった。。
ターミナルにログインすると、
あるディレクトリに格納している複数のtxtファイルを
ASCII Artとして
ランダムに出力してくれます。
やりたかったのはまさにこれだ!
ただこのリポジトリをクローンして、README.mdの説明通りにやるだけだと、自分の好きなASCII Artを出すということはできません。
まあ当然なのですが、自分の好きなASCII Artのファイルに置き換える必要があります。
では次、ASCII Artを楽に作れる方法がないか探しました。
ありました!「ansize」というGo言語で実装されたツールです。
(追記:よく見たらフォーク元があったのでそちらにリンクを張り替えました)
コマンド1つ実行するだけで、
pngやjpegの画像を
ASCII Artとして
txtファイルやasciiファイルに出力してくれます
こんな感じに出力されます。↓
これは例として上がっているピカチュウ⚡️
自分PCのターミナルで表示してみました。
可愛すぎる。。というかASCII Artってカラー可能なんだ。すごい。
ASCII Artの仕組みは全くわからんけど、とりあえずそれはやりたいこと実現してから考える!!
・やりたいことの整理
先人のツールを見て、やりたいことが見えてきました。
つまり、
ターミナルにログインすると、
自分の好きなキャラのASCII Artを
ランダムに出力したい
これを実現したいのです。
●やってみる
では、やってみます。
どちらのツールもREADME.mdの通りにやれば簡単にできるようになっています。
1. 「ansize」でASCII Artを作る
ansizeの使い方はとっても簡単です。
まずリポジトリをクローンして、README.mdの通りに「Installation」と「Development」を行います。
そして以下のコマンドを実行することで、画像がASCII Artのファイルに早変わり。
./ansize <変換したい画像ファイル名> <変換後のファイル名> <横幅の大きさ>
<変換したい画像ファイル名>:必須。私の環境では、pngとjpegが変換できることを確認
<変換後のファイル名>:必須。私の環境では、txtとasciiファイルに変換できることを確認。私はtxtファイルに変換しました。
<横幅の大きさ>:任意。出力する横幅の文字列を指定するみたい・・・なんかここの細かいことがREADME.mdに書いてなかったけど、こちらによるとそのようです。私は80にするのがちょうど良かった。
どんな画像をASCII Artにしたのかは最後のお楽しみ。。🤓
2. 「ASCII-Art-Splash-Screen」で作ったASCII Artをターミナルに出力する
次に、ASCII-Art-Splash-Screenでターミナルに出力します。
正直これを使わず他の方法がいくらでも考えられるくらい、簡単なPythonスクリプトなのですが、やっぱり最初から作るのを深夜にやるのはきついので感謝して活用させていただきます。
と思ってコードを見ました。それがこちら。
import random
import os
i = random.randrange(9) + 1
website="https://raw.githubusercontent.com/DanCRichards/ASCII-Art-Splash-Screen/master/art/"+ str(i) + ".txt"
os.system("curl " + website)
このpythonファイルを.bash_profileに読ませれば良いとのこと。
私の場合は、.bash_profileがログインの度に.bashrcを読むように設定しているので、.bashrcに読ませるようにします。
ただ、変えたいところがあったので、やりやすいように改変した結果が以下です。
import random
import os
import settings
# txtファイルを格納しているローカルのディレクトリを取得
artFileDir = settings.artFileDir
# 使用可能なASCII Artのファイル拡張子
extList = [".txt", ".ascii"]
# ASCII Artとして出力するファイルを取得
files = os.listdir(artFileDir)
correctFiles = []
for file in os.listdir(artFileDir):
base, ext = os.path.splitext(file)
if ext in extList:
correctFiles.append(file)
numOfFiles = len(correctFiles)
# ランダムにファイルを取得する
randomIndex = random.randrange(numOfFiles)
fileName = artFileDir + correctFiles[randomIndex]
# catコマンド実行
os.system("cat " + fileName)
元々のコードだとちょっと不便なところがあったので、以下ができるように直しました。
・txtだけではなくascii拡張子のファイルも出力
→asciiも表示できた方が便利かなと思ったので。。
・ASCII Artのファイル名を自由に決められる
→元のは連番数字のtxtファイル限定だったのですが、毎回その形式に名前変更するのは面倒なので。。
・画像はGithubからではなく、ローカルのディレクトリから取得
→Githubからだと毎回画像追加する度にGithubにプッシュしないといけないから。。(追記:ただこうするとホームディレクトリ以外で開いた時にエラーになるんですよね。。うーん。)
・ASCII Artのファイル数を頻繁に変えられる
→頻繁に画像入れ替えしたいので数変わる度にPythonコード修正は面倒だから。。
あとは、追加でsettings.pyを用意してそっちにローカルのディレクトリパスを書くようにしたり、とかしました。
原型を留めない感じになってしまいましたが、
最初のコードに色々とヒントをもらって、ここまでできたことに間違いはないです。
●結果
完成したので実行結果を載せます。あと、改変したコードを公開したのでそれも載せます。
・実行結果
こんな感じになりました。
オシリス!オベリスク!オシリス!ラー!
わーい!😆
分かる人はわかりますかね。遊戯王のモンスターです。
初期のが好きです。現代の遊戯王は色々変わってしまってついていけません。。
まあASCII Art出力してるだけなのですが!これがターミナルに毎回ランダムに出るというのが感動なのです。
そして見て分かるように、ASCII Artにする画像はシンプルなシルエットの方が断然きれいです。(ピカチュウのような)
私もこのあと結局違う画像を使いました。。
良い感じの画像を探すのが地味に大変。。💦
・「Ext-ASCII-Art-Splash-Screen-Ja」を作りました
改変したものは「Ext-ASCII-Art-Splash-Screen-Ja」として公開しました。
リポジトリ名のセンスないのは知ってます。。
「ASCII-Art-Splash-Screen」をフォークしています。
使い方は、フォーク元のとは少し違っているので、一応README.md書いています。
具体的にフォーク元とどこが変わったのかは、さっき上の方で書いた通りです。
自分で一からすぐ作れるくらい簡単なスクリプトでできてます。
というか別にpythonでなくて、shellとかでも全然良いよね。
全体的に日本語化したので、末にJaを付けました。
●最後に
かなり初歩的なレベルの内容ですが、
色々組み合わせると面白いなって思いました。
まあ遊びです。だいぶ趣味も入ってます。
多分、会社PCとかではやらない方が良いです笑
書き終わって思ったのは、
深夜に睡眠時間削って何やってんだか。。でした。
ちなみに一番苦労したことは、OSSのLICENSEを確認することでした。。
(他人のレポジトリをフォークするのは今回が初めてだった。。)
まあでもPCに好きなものが生息するようになったので、だいぶ幸せです。😊
終わり。
この記事が気に入ったらサポートをしてみませんか?