SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

小説執筆をプログラムで支援する(後編)~小説推敲補助ソフト開発編

  • X ポスト
  • このエントリーをはてなブックマークに追加

プラグイン形式のツール

 『小説推敲補助ソフト「Novel Supporter」』は、左ペインに「読み込んだテキストファイル」、右ペインに「実行結果(確認項目を可視化した状態)」を表示します。

左がテキスト、右が実行結果

 このツールは、プラグイン形式になっており、「tool」ディレクトリ内にサブディレクトリを作り、必要なファイルを設置することで、種類を増やせます。追加したツールは、「tool/tools.js」にサブディレクトリ名を記述することで、読み込み可能になります。

 小説を書いていて、確認したい項目が増える度にツールを追加する予定だったので、こうした仕様にしました。実際、小説を書く度に、ツールが増えています。

tool/tools.js
// ツールのセット
act.tl.setTools([
	 'search_near_words'
	,'check_kosoado'
	,'check_end_of_sentence'
	,'check_head_of_paragraph'
	,'warn_text'
	,'stroke_count_heatmap'
	,'sentence_heatmap'
	,'add_ruby'
	,'view_char_type'
	,'add_line_feed'
	,'text_to_speech_(sapi5)'
	,'sentiment_analysis'
	,'count_word'
	,'view_chapter_volume'
	,'check_expression'
]);

 各ツールは、以下のファイルを持ちます。

  • doc-<tool_name>.html …… ドキュメント
  • filter.js …… 実行用JavaScriptファイル
  • opt.css …… 設定ダイアログ用のCSS
  • opt.html …… 設定ダイアログ用のHTML
  • optDflt.json …… デフォルト設定
  • plugin.json …… ツールの設定(ツールで最初に読ま込まれるファイル)
  • res.css …… 結果表示用のCSS

plugin.json

 「plugin.json」が最初に読み込まれるファイルです。この設定によって、各種ファイルがソフト内にロードされます。

tool/<tool_name>/plugin.json
{
	"nm": "ツール名",
	"exp": "ツールの説明",
	"manual": "doc-<tool_name>.html",
	"css": ["opt.css", "res.css"],
	"opt": "opt.html",
	"filter": "filter.js"
	"js": ["extra_lib.js"]
}

optDflt.json

 「optDflt.json」がデフォルトの設定です。この値が、ソフトの設定ファイル「dat/opt.json」にコピーされます。全てのツールの設定は、ソフト自体の設定とともに、マージされて「dat/opt.json」に保存されています。この「dat/opt.json」をバックアップすることで、ソフトの設定を保存できます。また、このファイルを入れ替えることで、小説の種類に合わせて、設定を切り替えられるようにしています。

tool/<tool_name>/optDflt.json
{
	"datVersion": 1,

	"hogeHoge_txtRngMin": 1,
	"hogeHoge_txtRngMdl": 12,
	"hogeHoge_txtRngMax": 16
}

 データのバージョン管理については、「optDflt.json」にある「datVersion」の数値で行ないます。これは、Androidの「AndroidManifest.xml」内にある「versionCode」のようなものです。

 この「datVersion」の数値を大きくすると、ツールの設定ダイアログを開いた際に、最新データで上書きするか確認を表示するようにしています。また、以前のデータバージョンでなかった設定は、ソフトの設定ファイルに自動で追加されます。

filter.js

 ツールの処理自体は単純です。ツールの設定とテキストを引数に取り、右ペインに出力するHTMLを戻します。

 引数に使われるテキストは、「エディタ全体」「2つ以上の改行で区切られたブロック」「選択範囲」を、実行ボタンによって切り替えます。また、ショートカットも割り当てられるので、エディタ部分を書き換える度に、手軽に確認できます。

tool/<tool_name>/filter.js
// フィルターのセット
(function() {
	// プラグインのテンプレート
	act.tl.setFilter(function(opt, txt) {
		var res = exec(opt, txt);
		return res;
	});

	// 実行
	var exec = function(opt, txt) {
		var res = '';
		// 加工処理
		return res;
	};
})();

収録ツールの一覧

 『小説推敲補助ソフト「Novel Supporter」』は、記事執筆時点で、以下のツールを収録しています。以下、これらの中からいくつかを選んで、処理を解説していきたいと思います。

収録ツール
名前 機能
単語近傍探索 同じ単語が連続して出ているかを確認します。
こそあど確認 こそあど言葉が頻出しているかを確認します。
文末重複確認 文末の音が同じ(現在形や過去形が続いている)かを確認します。
段落先頭重複確認 段落の先頭が同じでうるさく見えないかを確認します。
文章警告 表現上注意すべき点や凡ミスを、機械的にチェックします。
画数ヒートマップ 文字の画数を元に、文字の背景色を変えます。読みやすさを視角化します。
文長ヒートマップ 一文の長さに応じて、文字の背景色を変えます。長過ぎる文を可視化します。
ルビ追加 様々な形式で、ルビを追加します。
文字種表示 文字の種類で、文字の背景色を変更。漢字と仮名の混じり具合や比率を確認。
指定文字数改行 指定した文字数で改行します。ページ分割も可。ぶら下げや禁則処理あり。
音声読み上げ(SAPI5) MSのSAPI5で読み上げ、耳で原稿を確認します。
センチメント分析 文章の感情の流れを、出現する単語から分析します。
使用単語集計 品詞ごとに、使用単語を集計して、多い順に表示します。
章ボリューム表示 章ごとのボリュームを、グラフで表示します。
言い回し確認 言い回しの確認。曖昧だったり伝聞だったりする部分が連続していないかなど。

次のページ
単語近傍探索

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10308 2017/08/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング