次ログ

次ログ

ゆるりと働いているSREの技術ブログのような何か。趣味の話も書く

差分画像を組み合わせた画像をツクールMV規格の画像ファイルにまとめるスクリプト

3連投稿です。 多分もう投稿するネタがないので、しばらくブログの更新が止まると思います。

まえがき

普段が私が絵を描く時に一番つまらない作業は、差分ファイルを作成することです。

なぜなら、差分を作り終わったあとで修正したい箇所が見つかった時、差分を作成する作 業をやり直す必要があるからです。しかも、差分が増えれば増えるほどその作業が増えて 、面倒になります。

そのくせ、やることは非常につまらない作業で、マウスでカチカチするだけというもので す。脳みそがマッハで腐っていきます。

この問題を解決しよう、ということで、自分用にスクリプトを作成しました。

目次

完成したスクリプト

上記のスクリプトを組み合わせて、実際の動作させるスクリプトは下記のようになります。

@echo off

set target_dir=actor019
set outname=%target_dir%_R_%%03d
set facename=%target_dir%_face%%03d
set img="%target_dir%\img"

if exist "%target_dir%\" (
  python layover_image.py "%img%\image_layer.json" %outname% -o "%img%\stand\right"
  python flippicts.py "%img%\stand"
  mkdir "%img%\face"
  python trim4mv.py "%img%\stand\right" %facename% -o "%img%\face"
  copy "%userprofile%\Documents\mydocs\image\rpg_mv\actors\README.html" %img%
  python pyzip.py "%img%" -n "%target_dir%" -x "%target_dir%\src" "%img%\src" "%img%\image_layer.json" "%img%\face\coordinates.csv"
  echo bat処理が終了しました。
) else (
  echo 指定したディレクトリ%target_dir%は存在しません。
)

pause

処理のフロー

今回の作業を自動化するにあたって下記の手順を想定しました。

  1. レイヤー分けした差分画像を組み合わせて、1枚の画像ファイルを生成する。
  2. 画像を任意の順番で組み合わせて、複数の画像を一気に生成する。
  3. 生成された画像から、左右反転した画像を生成する。
  4. 画像をトリミングして、RPGツクール用の8枚パネル上に配置する。
  5. 配布するようにZIPに圧縮する。
  6. Dropboxにアップする

これらの一連の手順をすべて単一のpythonスクリプトでやらせることも可能でしたが、 役割がそれぞれ全く異なるので、別スクリプトに分けておいて、batやbashでコマンドを つなぐようにしました。

また、今回は自分が配布するときのことを考えて、ZIP圧縮することまで自動化するよう にしました。Dropboxにアップする部分は、batchスクリプトの方でやるようにしています 。デスクトップでDropboxに同期するようにしていると、単純にcopyするだけで、Dropbox に配置できるからです。

設定ファイル

{
  "img":{
    "ext":"png",
    "colormodel":"RGBA",
    "base"   : "base",
    "option": [null,["red","highlight"]],
    "pattern" : {
      "necessary":[
          { "eyebrows" : "normal" , "eye" : "normal"   , "mouse" : "normal"  }
        , { "eyebrows" : "normal" , "eye" : "normal"   , "mouse" : "smile"   }
        , { "eyebrows" : "normal" , "eye" : "surprise" , "mouse" : "whisper" }
        , { "eyebrows" : "normal" , "eye" : "normal"   , "mouse" : "spin"    }
        , { "eyebrows" : "normal" , "eye" : "smile"    , "mouse" : "smile"   }
        , { "eyebrows" : "angry"  , "eye" : "normal"   , "mouse" : "shout"   }
        , { "eyebrows" : "sad"    , "eye" : "normal"   , "mouse" : "whisper" }
        , { "eyebrows" : "normal" , "eye" : "smile"    , "mouse" : "normal"  }
      ],
      "others":{
        "mouse":["normal","smile","whisper","spin","shout"],
        "eye":[
          { "name":"close"   ,"eyebrows":["normal"] },
          { "name":"scornful","eyebrows":["normal","angry"] }
        ]
      }
    }
  }
}

組み合わせる画像を配置するための、imgディレクトリのrootに配置します。

設定は単純です。 ファイル名の拡張子なしを指定しているだけです。

necessaryは必須の項目です。 この8個は一番最初に生成される画像になります。 1枚目のパネル画像の並び順を指定したい時に使います。

othersはオプションです。 最初の8枚の生成が終わったあとに処理されます。

正直、これで設定するのはやめようと思いました。

後で見た時に思い出すのに苦労するのと、配布するにはやや複雑な設定ファイルになるの で。

所感

実際に動かしてみたら、かなり作業が楽になりました。

絵のメンテとそれを配布する場所に反映する作業は、非常に手間がかかる割に見返りが少 ないです。

特に、ツクールMV用にトリミングする作業は非常に面倒で不毛な作業です。

拙作のTKoolFacetileMaker2でだいぶ楽になったとはいえ、自動化にまでは至っていませ んでした。

一度行って終了、ならまだ良いのですが、何度も修正することや、今後もやるであろう作 業に無駄が残るのは良くないので、それを自動化できたことの意義は大きいです。

今後

今回のスクリプトPythonで作成しています。 つまり、Windowsの一般ユーザの環境に標準でインストールされていません。

なので、一般向けに配布することを前提にした、スクリプトとして別の言語で書きなおそ うと思います。

現時点での候補としては、下記のものを考えています。

  • Java

    • メリット
      • 一番使い慣れているので、開発も保守も安定している
      • 実行環境も大体にPCにすでにあるため、配布も容易
      • 名前のブランドがあるので、ユーザ的にも安心?
    • デメリット
      • そろそろ新しい言語が勉強したい身としてはあまり触りたくない
      • IDEのサポートがあっても書くのが結構しんどい
  • Kotlin

    • メリット
      • JavaVM言語なので大体の環境で動作させられる。
      • Androidの正式言語の一つにあがっているので、今後の展望に明るい
      • Javaほど書くのがしんどくない。IDEのサポートもある
      • 実行可能ファイルのファイルサイズの増加はやや控えめ (800KBほど)
      • Javaのノウハウが大体使えるので、比較的学習が楽
      • JavaFXも使えるのでGUIアプリも作れる。
    • デメリット
      • 言語仕様がJavaより複雑なので、そのあたりの学習コストがかかる
      • ファイルサイズが増加する
      • 型推論といった仕様の理解がまだ甘いので、バグが見つかった時にサポートできる か怪しい
  • Go

    • メリット
      • 言語仕様がかなりシンプルで、学習コストが低めらしい
      • ロスコンパイル可能で、速度も早い
      • サーバサイド言語としての話題性もあるので、今後に期待できる。 事前に勉強しておけば仕事に繋がりうるかも。
    • デメリット
      • 初めて触るタイプの言語なので、学習コストが未知数
      • GUIアプリの作成は期待できない

途中までKotlinで作成を進めていたのですが、結局Kotlinの勉強するならJavaでいいかな ぁとか最近思うようになってきたので、これを機会にGo言語に触ってみようと思ってまし た。

GUIアプリの作成がやや厳しそうな話を聞いていますが、今回のスクリプトは自動化が目 的なので、CLIでいいかなぁと考えています。それならGoでもできそう。

なので、今回の移植作業はGo言語で行おうと考えています。
一体どんな言語なのか、すでにワクワクしています。

以上です。

静的な小説サイトからテキストを抽出して保存するスクリプト

どうもです。
ブログ更新忘れていたので、連投をば。

まえがき

もともとRPGツクール用のツールとかを配布するときに、 コミュニティサイトしか情報がなかったら良くないかも、 と思って開始したブログでしたが、 せっかくなので技術発信とかも少しでもしといたほうが、 今後の自分の糧になるのかなぁ、と思ったので、 そういう記事も書いていこうと思います。

目次

Webクローリングスクリプト

表題のとおり、今回はクローリングスクリプトです。

Bashwgetというコマンドを使えば、Webクローリングができるという情報を知って、自分がよく見ていた小説サイトの情報を抜き取って保存してみました。

参考サイト : http://girigiribauer.com/archives/925/

作成したスクリプト

#!/bin/bash
# -*- coding: utf-8 -*-

set -eux
: $1 $2 $3

# 対象サイトからHTMLを取得する
wget -r --random-wait $1 || exit 1

# ドメイン名のみ取り出す
dirname=`echo $1 | sed -E "s@https?://@@g" | sed -E "s@/.*@@g"`

# 不要なファイルを削除する
rm $dirname/*.png
rm $dirname/*.jpg
rm $dirname/*.gif
rm $dirname/*.zip

# ディレクトリ内のフォルダを取得
files=`find $dirname | xargs`
for file in $files; do
  if [ -f $file ]; then
    # 文字コードを変換して、別名ファイルで出力
    html=`cat $file | iconv -f $2 -t $3`
    title=`echo $html | sed -e "s@.*<title>\(.*\)</title>.*@\1@g"`

    cat $file | iconv -f $2 -t $3 \
      | sed -E 's@<[^>]*>@@g' \
      | sed -E 's@(^ +| +$)@@g' > "${dirname}/${title}.txt"

    # 元のファイルを削除
    rm $file
  fi
done

解説

引数チェック

set -eux
: $1 $2 $3

引数チェックの方法の一つです。 Qiitaの記事で知りました。
http://qiita.com/m-yamashita/items/889c116b92dc0bf4ea7d

今回の引数はそれぞれ下記の用途で使用しています。

HTML取得+ドメイン名の取得

# 対象サイトからHTMLを取得する
wget -r --random-wait $1 || exit 1

# ドメイン名のみ取り出す
dirname=`echo $1 | sed -E "s@https?://@@g" | sed -E "s@/.*@@g"`

wget再帰的に取得した時、ドメイン名のフォルダに保存されます。

そして、保存されるファイル名は、htmlファイルのファイル名なので、 必ずしも、その小説のタイトルではない場合があります。

なので、findしてhtml内のタイトルをファイル名にして保存するようにしたいわけです。 そこでwgetした時のURLからドメインのみを抜き出します。

sedするときは/(スラッシュ)を使うことが多いですけれど、 今回は@を使ってます。 URLが混じってると失敗してしまうので。

フォルダ内のファイルを処理

# ディレクトリ内のフォルダを取得
files=`find $dirname | xargs`
for file in $files; do
  ...
done

先ほど取得したドメイン名のフォルダをfindして、ループで処理します。

HTMLの文字コードの変換

# 文字コードを変換して、別名ファイルで出力
html=`cat $file | iconv -f $2 -t $3`

保存したファイルはUnicode文字として保存されていましたので、 それをUTF-8に変換する必要がありました。 なので、iconvで変換するようにします。

タイトルの取得

title=`echo $html | sed -e "s@.*<title>\(.*\)</title>.*@\1@g"`

次に、ファイル名がわかりやすくなるように、HTML内のタイトル要素を取得します。

ここも先ほどと同様にsedを使います。 sed正規表現と後方参照でタイトル部分のみを抜き出します。

HTMLからテキストのみを取り出して整形

cat $file | iconv -f $2 -t $3 \
  | sed -E 's@<[^>]*>@@g' \
  | sed -E 's@(^ +| +$)@@g' > "${dirname}/${title}.txt"

今回は小説サイトのテキストが必要なので、不要なタグを削除します。
また、インデントが存在していても見づらいので、それも削除します。

削除したら、先ほど取得した$titleをファイル名として保存します。

ここで、先ほど取得した$htmlを使用していないのは、 echo $htmlすると改行文字が削除されてしまっていたからです。

対処方法がわからなかったので、ここではファイルから再度取得して文字コードを変換し た結果をパイプするようにしました。

ここでも同様にsedします。 sedが便利すぎてやばいです。 でも何でも正規表現すると遅くなるとかって話を聞いたので、あまり良くはないのかも…。

所感

そんな感じで、好きな小説サイトのテキストを抜き出して閲覧できるようになりました。
閲覧するときは、less -N $filenameで読めば、ターミナルで読書ができます。

問題点としては、一昔前のような静的な小説サイトでないと機能しないということです。

Ctrl + U してソースを閲覧して、テキストがすっからかんになっているような 動的にページが構築されているようなサイトだと、ほぼ失敗します。

次に、1ページに1話である必要があります。 1話が何ページにも渡っていて、それらを1つのファイルにまとめるような処理は含まれていません。

他にも、ページ内に小説の記事以外の要素が含まれていてもダメです。

ブログサイトのように、他の記事へのリンクや、サイドメニューとか ヘッダとかの要素も取り込んでしまうので、それらを省く処理も場合によっては必要です。

この辺は課題ですね。

キャラ設定を考えるためのアプリ作りました

お久しぶりです。次郎です。

現状報告

仕事が忙しくて、ゲーム制作に着手できないので、
ゲーム制作の少しでも楽にするためのモノばかり作っています。

最近はもっぱらPythonBashを勉強していて、
ちょっとした作業の自動化とかしつつ、ゲーム制作を放置しています。

たとえば、キャラの表情の差分を組み合わせて、
一気に差分画像を生成するツールとかもPythonで作成しました。

配布とかはしていませんが、Github上にはすでに存在します。
ただし、ドキュメントとかは一切用意していませんが・・・。

せっかくつくったツールなので、誰かに公開したいと思っているのですが、
いくつか問題がありまして、Pythonは実行環境がないと動かせないのと、
exe化するとファイルサイズが巨大化する点です。

なので、配布するなら自分用の簡単なのを作って、
Javaに移植するといった感じで今まで作っていたのですが、
最近Javaを書くのが結構しんどくて…。

代替案として、Go言語というのが良さそう? と最近知ったので、Pythonと平行しつつ、Go言語も勉強しようかなぁと
思っている次第です。

目次

作成したアプリ

前置きはそこまでに、今回作成したアプリについて、一応紹介します。
下記のリンク先がそれです。

https://jiro4989.github.io/charaseat/

今回の実装ではそれなりにたくさんのデータを扱うということだったので、 Javascriptで動的にデータを追加するには、処理が重いかと考えたので、 アップ前にPythonでHTMLを生成してGithubにアップするようにしています。

htmlのテーブル部分生成スクリプト

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import re
from datetime import datetime
from os.path import splitext, basename

def main():
    datas = [
              "res/data/一人称.html"
            , "res/data/二人称.html"
            , "res/data/性格.html"
            , "res/data/髪型.html"

            , "res/data/トップス.html"
            , "res/data/ズボン.html"
            , "res/data/スカート.html"
            , "res/data/ドレス.html"
            , "res/data/制服.html"
            , "res/data/アンダーウェア.html"
            , "res/data/履物.html"
            , "res/data/かぶりもの.html"
            , "res/data/寝巻き着.html"
            , "res/data/水着.html"
            , "res/data/装身具.html"

            , "res/data/その他.html"
            ]

    checkboxtext = \
            '<label>' \
                '<input' \
                ' type="checkbox"' \
                ' name="{title}"' \
                ' value="{title}:{text}"' \
                ' onclick="updateRecords();"' \
                ' />' \
                '{fulltext}' \
            '</label>'

    tables = []
    for filepath in datas:
        with open("table.html") as table:
            tabletext = table.read()
            with open(filepath) as datafile:
                caption = splitext(basename(filepath))[0]

                line = datafile.readline()
                trs = []
                while line:
                    line = line.rstrip("\n")
                    if line == "":
                        continue

                    if line.startswith("<"):
                        text = re.sub(r"</?[^>]+>", "", line)
                    else:
                        text = line

                    text = checkboxtext.format(title=caption, text=text, fulltext=line)
                    text = "<tr><td>{}</td></tr>".format(text)
                    trs.append(text)
                    line = datafile.readline()
                tbody = "\n".join(trs)
                newtable = tabletext.format(caption=caption, tbody=tbody)
                tables.append(newtable)

    htmllines = []
    with open("template.html") as template:
        text = "\n".join(tables)
        line = template.readline()
        while line:
            if "{target}" in line:
                htmllines.append(text)
            elif "{time}" in line:
                now = datetime.now().strftime("%Y/%m/%d")
                htmllines.append(now)
            else:
                htmllines.append(line)
            line = template.readline()

    with open("index.html", "w") as indexhtml:
        indexhtml.write("".join(htmllines))

if __name__ == '__main__':
    main()

テーブル埋め込みのテンプレートhtml

<div class="charaTableArea">
  <input type="button" value="ランダム設定" onclick="setRandomContent('{caption}');" />
  <table border="1">
    <caption>{caption}</caption>
    <thead>
      <tr style="background-color: yellow;">
        <td>項目</td>
      </tr>
    </thead>
    <tbody>
      {tbody}
    </tbody>
  </table>
</div>

やりかたは単純。

dataフォルダ配下に、1行に1データを記述しただけのテキストファイルを配置し、 それをPythonで読み込んで、ファイル名をcheckboxのnameに、データをvalueとする 文字列を生成して、それをtable.htmlの{tbody}にformatで埋め込んでいるだけです。

これで、スクリプトを実行すると index.htmlが更新されるという仕組みです。

pushする前にスクリプトを実行するスクリプトを用意しておけば、 データを更新して、pushするだけで完成、というわけです。

お手軽です。

所感

極限までデザインは手抜き、いろいろ手抜きです。   自分用に作ったアプリですが、正直使うか怪しいです。

今回のアプリ制作を通して得た知見としては、
GithubPagesでWebアプリを作る方法がわかった、ということくらいです。

以上です。

Windows10をキーボードのみで操作

前置き

こんばんは。 突然ですが、皆さんはマウスを使用していますか?

私はほとんどマウスを使わずに、 あらゆる操作をキーボードでやろうとしてます。

なぜそんな縛りプレイをしているのか?
というと、職業柄プログラムを書く時間が非常に長いからです。

プログラムを書く時はvimを使っているので、基本的にマウスは触りません。

そうなってくると、 情報を集めたくなってブラウザで何か検索する時も マウスに持ち帰るのが億劫になります。

同様に、エクスプローラでのファイル操作や メール作成などでもマウスに持ち帰るのが億劫になってきます。

さらには、プログラミング以外をして過ごす時間が長くなる自宅でも マウスに触りたくなくなってきます。

気がついたらマウスなしでもそれなりの速さでPC操作ができるようになったので、 せっかくなのでその方法を公開したい、と思った次第です。

以下にキーボードのみで操作することの長所と短所を述べます。

長所

  • マウスに持ち帰る時間がなくなるため、部分的に作業効率が上がる
  • マウスを使うスペースが確保できない状況でも作業可能になる(新幹線など)
  • 出かける時にPCを携帯する場合の荷物が減る

短所

  • なれるのに時間がかかる
  • キーボードが壊れるのが早くなる
  • 会社でやると気持ち悪がられる

というわけで、そんなPC操作方法を紹介してみます。

ブラウザにプラグインをいれたりしません。
Windows10の挙動を変えるようなソフトを入れたりもしません。
可能な限り、標準の機能のみで操作します。

※マウスで操作するより高速というわけではありません。

本題

前提条件

  • ホームポジションをしっかり守っている
  • ブラインドタッチができる
  • それなりの速さでタイピングができる

PC操作全般

操作 説明
Alt + Tab ウィンドウを切り替える
Alt + Shift + Tab ウィンドウを切り替える
Alt + Space ウィンドウ右クリックのメニューを開く
Winキー + ↑ ウィンドウの最大化
Winキー + ←または→ ウィンドウの分割表示

ネサフ

ネサフする時ってキーボードのみで操作するのって難しそうに思えますが、 実は2つほど、高速に行えるようにする方法があります。

  1. Vimperator, Vimiumといったプラグインを入れる
  2. Ctrl + FとTabとj, kを使う

前述の方法はよく見かける方法です。 FirefoxChromeだと操作をvim風に行えるようにキーマップを変更してしまいます。

ただしこの方法には問題があります。

  1. 特定の画面で操作できなくなる
    ブラウザ上でPDFを開いたときとかはまさにこんな感じになります。
  2. デフォルトのキーと競合する
    GmailなどのGoogleのサービスはデフォルトでvimっぽい操作を提供しているので、 それらの操作とバッティングした時に面倒くさいことになったりします。
  3. 他の人のPCだとプラグインがないときがある
    かといって勝手にプラグインを入れるわけにもいかない

これらの問題点を考慮して、私はキーマップを変更しないでネサフをするようにしています。

ブラウジングの基本的なショートカット

私はGoogle Chromeしか使わないので、ショートカットはChromeのものです。 私が頻繁に使うものを載せます。

操作 説明
Ctrl + T 新しいタブを開く
Ctrl + N 新しいタブを別ウィンドウで開く
Ctrl + W タブを閉じる
Ctrl + Shit + T 閉じたタブを復元
Ctrl + Shit + Q すべてのChromeを終了する
Ctrl + Tab 次のタブに移動
Ctrl + Shift + Tab 前のタブに移動
Ctrl + 1 先頭のタブに移動
Ctrl + 2から8 X番目のタブに移動
Ctrl + 9 最後のタブに移動
(リンク上で) Enter リンクを開く
(リンク上で) Ctrl + Enter 別タブでリンクを開く
Ctrl + ; フォントの拡大
Ctrl + - フォントの縮小
Ctrl + 0 フォント倍率を100%に戻す
ページを下に進める
ページを上に進める
ページを左に進める
ページを右に進める
PageDown ページを半ページ下に進める
PageUp ページを半ページ上に進める
Ctrl + D ページをブックマーク
Ctrl + Shift + O ブックマークマネージャを開く
Alt + F メニューを開く

特に私は視力が低いのでフォント拡大を頻繁に使いますし、 他の人と情報共有する時に見やすくするために拡大したりします。

補足

Linux Mint環境だとCtrl + ;で拡大ができませんでした。 しかし、Ctrl + ^で拡大ができるようです。

他にもGoogleSpreadSheetでも;のはずのキーが^で機能したりしていたので、 もしかしたら、Linux版はショートカット設定が変更されているのかもしれません。

ググる

検索をする時は Ctrl + L でアドレスバーにフォーカスするので、 唐突にググりたくなったらCtrl + Lです。

次に、Chromeでググったときの検索結果を選択します。
検索結果を選択する方法として、Tabを連打してフォーカスする方法がありますが、それとは別に、j, kで選択する方法があります。

検索エンジンGoogleでの検索窓の下に[ 設定 ]という項目があります。 それを選択して検索設定の項目に移動します。

Google インスタント検索の予測の設定をインスタント検索の結果を常に表示する に変更すると、検索直後の画面が遷移した後に、j, kで検索結果を移動できるようになります。

再度検索窓にフォーカスしたい場合は / とタイプします。

ショートカット機能しない問題

以前は検索後、jやkで検索結果を移動できていたのですが、 現在(2017/08/27)それらの機能が使えないような感じです。(バグ?)

しかたないので、DuckDuckGoという検索エンジンを今は使っています。 こちらでしたらj,kで移動できます。

リンクの選択

ページを読み進めるのはだいたいSpaceやPageDown, PageUpとかのキーで十分ですが、リンクの選択はやや手間です。

Tabの連打でなんとか選択することもできますが、 ブログのコンテンツの配置によってはTabを長押ししてしばらく待たないといけない場合があります。

それも行き過ぎてしまったりで、結構面倒が伴います。

で、そういう時はCtrl + Fです。ページ内検索です。

適当に途中まで入力するとChromeでは検索結果のフォーカス中のものがオレンジ色にハイライトされます。

この時にEscapeで検索窓を閉じると、そのハイライトされている部分にフォーカスが移ります。

この特性を利用してリンクを選択します。

リンクがIMEでの変換が必要そうな場合は、その周辺の変換が不要そうなテキストを対象に検索欄に入力して、TabまたはShift + Tabでフォーカスします。

なれるとパパっとタイプしてリンクを選択できるようになります。

ボタンが文字ではなく画像として貼り付けられてる場合はあきらめてマウスを使います。

ブックマークを開く

ブックマークを開く操作も、事前準備が必要ですけれどキーボードのみで出来ます。

まず、ブックマークを登録する時に、キーボードから呼び出したいキーの前に &マークを付けます。

例えば、Pixivをブックマークに登録する時は &Pixiv とします。

次にブックマークを開く動作は Alt + F → Bです。

これで、ブックマークのメニューが開けるので、ここで先程登録したPを押します。
Alt + F → B → P です。

これでPixivのページを開けるようになります。
別タブで開きたい時は、Ctrl + Tで新しいタブを開いておきます。

ブックマークだけでなくフォルダも同様に登録できます。
私の場合は下記のような感じに登録してます。

  • (&M) マイページ (フォルダ)
    • &Pixiv
    • (&N) ニコニコ

先頭の文字が日本語の場合は別途キーを付けます。

SNS (Twitterとか)

Twitterとかを使う時は流石に無理かも、と思われるかもしれませんが、 有名なSNSとかだと公式がショートカット操作をサポートしている場合があります。

Twitterでしたら ? とタイプするとショートカットヘルプが表示されます。 他にもGmailやInboxといったGoogleのサービス、SoundCloudFeedlyも ? ヘルプに対応しています。

Youtubeはヘルプを表示しませんが、h, j, k, /といったキーで操作できます。 Pixivもヘルプこそでませんが、カーソル←、→でページを移動したり、 Vで開く、Lでいいね、Bでブックマークといった具合の操作をサポートしています。

/ で検索窓にフォーカスという操作はだいたい共通でサポートされている印象です。 (Vimの / 検索が由来でしょうか?)

ページ内のテキストのコピー

マウス使います。

ファイル操作

エクスプローラでのファイル操作はマウス必須、と思うかもしれませんけれど、これも実はキーボードのみでかなり素早く操作できます。

キーボードショートカット

操作 説明
Winキー + E エクスプローラを開く
ファイル名の先頭の文字 最初に見つかるそのキーで始まるファイルに移動
Ctrl + C コピー
Ctrl + V 貼り付け
Ctrl + X 切り取り
Ctrl + L アドレスバーにフォーカス
Ctrl + Shift + N 新しいフォルダを生成
Ctrl + A ファイルを全選択
Shift + ↓または↑ 複数ファイルを選択
Ctrl + ↓または↑ 選択状態を維持したまま移動
Ctrl + Space 選択状態の反転
Alt + ↑ 親フォルダに移動
F2 ファイル名の変更
Alt + D デスクトップを開く

ファイルを選択する時はファイル名の先頭の文字をパパっと入力します。
これはかなり便利なのでぜひ覚えましょう。

大部分のファイルを移動するときはCtrl + Aしてから不要なファイルまでCtrl + カーソルで移動してCtrl + Spaceで解除
とびとびのファイルを選択するときはCtrl + カーソルで移動してCtrl + Spaceで選択

新しいファイルを作成

新しいファイルを作成するとき、例えばソースを新たに作りたくなった時ですが、Windows10だとAlt + Fでコマンドプロンプト、またはパワーシェルが起動できます。

そこからvimなりを起動してもいいですが、単純にテキストが必要な場合はCtrl + Lでアドレスバーに移動して gvim とかって入力すればいいです。

*アドレスバーからパスが通っている実行ファイルを呼び出すことができるので、 gvim hoge.txtみたいに入力すればエクスプローラからでもファイルをすぐに作れます。

フォルダ移動

頻繁にアクセスするフォルダはクイックアクセスに登録しておきます。

エクスプローラはWinキー + Eで開けるので、エクスプローラを開いたらCtrl + Eでアドレスバーに移り、Tab→Tabでクイックアドレスのペインのフォーカスできます。

メール作成

Thunderbirdの場合

メールはThunderbirdをメインで使ってます。

Thunderbird ショートカットとかってググればそこでキー操作がいっぱいでてくるのでそれを参考にすればキーボードのみで操作できます。

メニューバーのメニューを選択するのは ファイル(F) の場合は Alt + Fです。 この操作は大体のGUIアプリで共通です。

メール本文のコピー

Thunderbirdでのメール本文でカーソル操作は基本的にTabでリンクにフォーカスするだけです。

しかし、メッセージペインにフォーカスを移した状態でF7を押すと、 CaretBrowsingモードを選べるようになります。
もしこの表示がでなければ、about:configから設定する必要があります。

これでメッセージ本文内をカーソル移動できるようになるのですが、 フォーカスを移すときにまた一工夫が必要です。

コピーしたいテキストの付近で楽にタイプできそうなテキストを見つけて Ctrl + Gで検索します。

検索してテキストが変わったらEscapeすると、検索した位置からキャレットが開始します。

Tabでフォーカスを移す方法もありますが、 その場合はURLのようなリンクになっている場合でしか使えません。

Sylpheedの場合

Linuxに古くから存在するメーラです。 Thunderbirdよりもずっと軽くて動作が軽快です。

現在(2017/08/27)はSylpheedをメインで使っています。 SylpheedThunderbird同様に多彩なショートカットが使えるのでおすすめです。

メール本文のコピー

Thunderbirdと同様の操作ができます。 F7キーでキャレット操作が可能です。

問題としては、メール本文なのリンクをキーボードで開けません。

マウスでクリックするか、 リンクをコピーしてブラウザに貼り付ける必要があります。

Gmail, Inboxの場合

Googleのサービスはだいたい ? でヘルプを表示してくれます。

で、結構膨大なショートカットキーをサポートしてくれているので、だいたいなんとかなります。

資料作成

表計算

ExcelもGoogleSpreadsheetもショートカットが豊富にあるので、暗記すればなんとかなります。

スライド作成

マウス使います。

プログラミング

Vim使ってればマウスは不要です。

EclipseといったIDEだとたまにフォーカスが見当たらなくなるときがあるので、さすがにマウスを使う頻度が上がりますが、前述のAlt操作とかだけでだいたい可能です。

有名なIDEだとVimプラグインがあるんでだいたいなんとかなります。

端末起動

Winキー + X + C または I

環境変数設定

Winキー + X + Y から
Shift + Tabでシステム情報まで移動

システムのプロパティを開いたら
N → Tab → S → P で環境変数PATHを選択できるので
Tab → Tab → EnterでPATHの編集が出来ます。

設定が終わったらEscape連打で閉じていって Alt + Space + Cで窓を閉じる

その他

操作 説明
Ctrl + Tab 次のタブに移動
Ctrl + Shift + Tab 前のタブに移動
Winキー + X → U → U Windowsのシャットダウン
Winキー + R ファイル名を指定して実行
Winキー → 実行ファイル StartMenuに登録されてるアプリを探す

Windows設定画面などのタブは全部Ctrl + Tab系でタブを切り替えられます。
この操作は他のWindows上のアプリでも再現されていることが多いです。

まとめ

速度面的にはマウスを使ったほうが早い場面は多々あるので、
スピード重視の方はマウスと併用したほうがいいと思いますが、
一応、キーボードのみでだいたいの操作が可能です。

文章編集特化ツール 兼 テキスト変換ツール

ツクールMVの文章編集に特化したテキストエディタです。
同時にテキストファイルをツクールMVのjsonファイルに変換するツールでもあります。

テキストファイルを独自に用意した書式に従って書くことで、
本ソフトに取り込むときに、先頭と末尾に自動で括弧を追加したり
アクター名を補完したり、
ウィンドウ内に収まるように折り返してくれたりします。

オススメの使い方は、使い慣れたテキストエディタで文章だけ作ってしまって、
表情の追加や変数、制御文字の追加を本ソフトで行うという感じです。

本ソフトで可能なことは以下の通りです。

  • テキストがウィンドウに入りきらない時のためのインポート時の自動折り返し
  • プラグインなどによる解像度変更に対応するための折り返し文字数の変更
  • テキストの一括変更
  • アクター名のみを一括で変更
  • 表情を数字キーで素早く変更
  • 選択範囲の文字色を変更をマウスのみで実行
  • 変数、アクター、アイコン画像を一覧で確認しながらマウスで追加
  • 複数のデータを1つのデータに連結
  • 文章データの正規表現検索+絞り込み
  • テキストの先頭と末尾を括弧括ってインポート
  • 括弧が存在したときに、文章の折り返し時に括弧の高さに合わせるオプション

逆に、本ソフトでできないことは以下の通りです。

  • すでに存在するツクール側の文章データのインポート (現時点では)
  • ツクールとのリアルタイム連携
     文章をツクール側に出力したら、ツクールを再起動しないと読み込まれません。
  • 文章の合間にイベントをはさむこと。
     文章をMV側に出力してからコピペするなりして操作してください。

イメージ

利用規約

github.com

ダウンロード

github.com

余談

滅茶苦茶作るのしんどかったです。

今回は操作方法とかがかなり複雑だと思ったので、 ドキュメントの整備にすごく時間がかかってしまいました。

総合的な作業量でいうとSkillsEditor以上です。
まぁSkillsEditorはEclipseで開発してたので、その関係もあるかもですが。

しばらくはこれくらいの規模のツールの開発はやりたくないですね…。 少なくともJavaでは。

最近気になっているkotlinという言語で開発をしてみたいので、 もしするとしたらkotlinで今後は開発していきたいです。

ツクールのキャラチップアニメーションの確認用ツール

ソフトウェア概要

ペイントソフトなどでキャラチップ画像を編集した時に、ツクール内でどのように再生されるかを確認するためのツールです。

上書き保存されたタイミングを監視して、変更があった時に、自動でアニメーション画像を更新します。

最前面表示といったオプションもあるのでペイントソフトの上で小さく表示して、 アニメーションを確認しながら編集することができると思います。 キャラチップ制作に役立ててください。

標準でツクールMV・VXACEのキャラチップ、サイドビューに対応しています。 それ以外の規格にも付属のプリセット編集画面を使用することで対応できます。

デモ

使い方・利用規約ソースコード

github.com

動作条件

動作するのに最新Javaがインストールされている必要があります。ダブルクリックで動作 しないかたは下記リンクからインストールしてください。

https://java.comjava.com

ダウンロード

github.com

余談

私の代わりにキャラチップ作るの得意な方誰か作ってください。(他力本願)

立ち絵差分をツクール2000用にトリミングするツール

タイトルそのまんまです。

デモ

注意点

(修正予定)減色処理を施していないため、現時点では外部ツールで減色処理をしないとツクールから読み込めません。

propertiesフォルダを最初からzipに同封していますが、このフォルダは削除しないで ください。動作に必須の設定ファイルです。

あとまだWindowsでの動作確認をしていません。おそらく動くはず、って感じになってし まってます。申し訳ありません。Windowsでも動作確認できましたらREADMEも更新します が、まだ数日確認できません。

使い方・利用規約ソースコード

github.com

動作条件

動作するのに最新Javaがインストールされている必要があります。ダブルクリックで動作 しないかたは下記リンクからインストールしてください。

https://java.comjava.com

ダウンロード

www.dropbox.com

余談

ツクール2000にも対応してほしいといった要望があったので、ちょろっといじって2000用 のを作ってみました。

本当は既存のTKFM2に2000オプションを追加する形で実装したかったんですが、ツクール 2000の標準規格が2x4じゃなくて4x4だった関係で実装を断念することに。

動的にレイアウトを変更する実装をTKFM2ではまだしてなかったので、今からTKool Image Tile Editorみたいに動的なレイアウト構築方法に変更すると1週間以上かかるのは確実で した。

そういう諸事情で、TKFM2のソースをまるごと流用してレイアウトと操作とかだけを変更 した2000版を別で作成することにしました。そのかいあって2,3時間くらいの編集作業だ けで済みました。

あんまりこういう実装は良くないんですけどね…。まぁ先を見越した設計をしなかった私 が悪いんです。はい。