見出し画像

PhotoShopのテキストレイヤーに小学校で習わない漢字が含まれるかチェックする

スクリーンショット 2021-01-07 17.57.27

子ども向けのインスタレーションやアプリを作ることが多いのですが、PhotoShopデータ内に小学生が習わない漢字が入ってるかチェックしたい!というデザイナーからの要望がありまして、去年末にお試しでJSX書いてみました。

小学校での学習漢字について

・文部省の学習指導要領
https://www.mext.go.jp/a_menu/shotou/new-cs/index.htm

・漢字一覧(平成20,21年改訂)
https://www.mext.go.jp/a_menu/shotou/new-cs/youryou/syo/koku/001.htm

・2020年度から一部漢字が変更されたらしい
https://ieben.net/syou-kanji/2020list-zen/
https://www.mext.go.jp/component/a_menu/education/micro_detail/__icsFiles/afieldfile/2019/03/18/1387017_002.pdf
https://ja.wikipedia.org/wiki/%E5%AD%A6%E5%B9%B4%E5%88%A5%E6%BC%A2%E5%AD%97%E9%85%8D%E5%BD%93%E8%A1%A8

まずは漢字一覧を調べてみる。
以下が(2020年度更新された)小学校で習う漢字一覧。
※コピペミスもあるかもなので、正しくは学習指導要領を見てね。

小学校一年生

一 右 雨 円 王 音 下 火 花 貝 学 気 九 休 玉 金 空 月 犬 見 五 口 校 左 三 山 子 四 糸 字 耳 七 車 手 十 出 女 小 上 森 人 水 正 生 青 夕 石 赤 千 川 先 早 草 足 村 大 男 竹 中 虫 町 天 田 土 二 日 入 年 白 八 百 文 木 本 名 目 立 力 林 六

小学校二年生

引 羽 雲 園 遠 何 科 夏 家 歌 画 回 会 海 絵 外 角 楽 活 間 丸 岩 顔 汽 記 帰 弓 牛 魚 京 強 教 近 兄 形 計 元 言 原 戸 古 午 後 語 工 公 広 交 光 考 行 高 黄 合 谷 国 黒 今 才 細 作 算 止 市 矢 姉 思 紙 寺 自 時 室 社 弱 首 秋 週 春 書 少 場 色 食 心 新 親 図 数 西 声 星 晴 切 雪 船 線 前 組 走 多 太 体 台 地 池 知 茶 昼 長 鳥 朝 直 通 弟 店 点 電 刀 冬 当 東 答 頭 同 道 読 内 南 肉 馬 売 買 麦 半 番 父 風 分 聞 米 歩 母 方 北 毎 妹 万 明 鳴 毛 門 夜 野 友 用 曜 来 里 理 話

小学校三年生

悪 安 暗 医 委 意 育 員 院 飲 運 泳 駅 央 横 屋 温 化 荷 界 開 階 寒 感 漢 館 岸 起 期 客 究 急 級 宮 球 去 橋 業 曲 局 銀 区 苦 具 君 係 軽 血 決 研 県 庫 湖 向 幸 港 号 根 祭 皿 仕 死 使 始 指 歯 詩 次 事 持 式 実 写 者 主 守 取 酒 受 州 拾 終 習 集 住 重 宿 所 暑 助 昭 消 商 章 勝 乗 植 申 身 神 真 深 進 世 整 昔 全 相 送 想 息 速 族 他 打 対 待 代 第 題 炭 短 談 着 注 柱 丁 帳 調 追 定 庭 笛 鉄 転 都 度 投 豆 島 湯 登 等 動 童 農 波 配 倍 箱 畑 発 反 坂 板 皮 悲 美 鼻 筆 氷 表 秒 病 品 負 部 服 福 物 平 返 勉 放 味 命 面 問 役 薬 由 油 有 遊 予 羊 洋 葉 陽 様 落 流 旅 両 緑 礼 列 練 路 和

小学校四年生

愛 案 以 衣 位 茨 印 英 栄 媛 塩 岡 億 加 果 貨 課 芽 賀 改 械 害 街 各 覚 潟 完 官 管 関 観 願 岐 希 季 旗 器 機 議 求 泣 給 挙 漁 共 協 鏡 競 極 熊 訓 軍 郡 群 径 景 芸 欠 結 建 健 験 固 功 好 香 候 康 佐 差 菜 最 埼 材 崎 昨 札 刷 察 参 産 散 残 氏 司 試 児 治 滋 辞 鹿 失 借 種 周 祝 順 初 松 笑 唱 焼 照 城 縄 臣 信 井 成 省 清 静 席 積 折 節 説 浅 戦 選 然 争 倉 巣 束 側 続 卒 孫 帯 隊 達 単 置 仲 沖 兆 低 底 的 典 伝 徒 努 灯 働 特 徳 栃 奈 梨 熱 念 敗 梅 博 阪 飯 飛 必 票 標 不 夫 付 府 阜 富 副 兵 別 辺 変 便 包 法 望 牧 末 満 未 民 無 約 勇 要 養 浴 利 陸 良 料 量 輪 類 令 冷 例 連 老 労 録

小学校五年生

圧 囲 移 因 永 営 衛 易 益 液 演 応 往 桜 可 仮 価 河 過 快 解 格 確 額 刊 幹 慣 眼 紀 基 寄 規 喜 技 義 逆 久 旧 救 居 許 境 均 禁 句 型 経 潔 件 険 検 限 現 減 故 個 護 効 厚 耕 航 鉱 構 興 講 告 混 査 再 災 妻 採 際 在 財 罪 殺 雑 酸 賛 士 支 史 志 枝 師 資 飼 示 似 識 質 舎 謝 授 修 述 術 準 序 招 証 象 賞 条 状 常 情 織 職 制 性 政 勢 精 製 税 責 績 接 設 絶 祖 素 総 造 像 増 則 測 属 率 損 貸 態 団 断 築 貯 張 停 提 程 適 統 堂 銅 導 得 毒 独 任 燃 能 破 犯 判 版 比 肥 非 費 備 評 貧 布 婦 武 復 複 仏 粉 編 弁 保 墓 報 豊 防 貿 暴 脈 務 夢 迷 綿 輸 余 容 略 留 領 歴

小学校六年生

胃 異 遺 域 宇 映 延 沿 恩 我 灰 拡 革 閣 割 株 干 巻 看 簡 危 机 揮 貴 疑 吸 供 胸 郷 勤 筋 系 敬 警 劇 激 穴 券 絹 権 憲 源 厳 己 呼 誤 后 孝 皇 紅 降 鋼 刻 穀 骨 困 砂 座 済 裁 策 冊 蚕 至 私 姿 視 詞 誌 磁 射 捨 尺 若 樹 収 宗 就 衆 従 縦 縮 熟 純 処 署 諸 除 承 将 傷 障 蒸 針 仁 垂 推 寸 盛 聖 誠 舌 宣 専 泉 洗 染 銭 善 奏 窓 創 装 層 操 蔵 臓 存 尊 退 宅 担 探 誕 段 暖 値 宙 忠 著 庁 頂 腸 潮 賃 痛 敵 展 討 党 糖 届 難 乳 認 納 脳 派 拝 背 肺 俳 班 晩 否 批 秘 俵 腹 奮 並 陛 閉 片 補 暮 宝 訪 亡 忘 棒 枚 幕 密 盟 模 訳 郵 優 預 幼 欲 翌 乱 卵 覧 裏 律 臨 朗 論

操作手順から考える

漢字がわかったので、これを配列に入れて、テキストレイヤーの文字取得して、その中から漢字だけ抽出して照らし合わせたらできそうだなーてなことで、先に操作の流れを確認する。

テキストレイヤーを選択する(→レイヤー情報を取得する方法)
メニューを選ぶ(→PSを拡張するためのJSXファイル置き場所)
ポップアップが開いて、小学校で習わない漢字が含まれている場合は明示する(→ウインドウとUIの作り方)
OK で閉じる

VSCodeでJSXを書く準備

書き始めるにあたって、JSXを編集する→PhotoShopの「ファイル」>「スクリプト」>「参照」→動作確認→JSX編集・・・は心が折れてしまうので、ちょっとでも開発しやすいようにVSCodeの「ExtendScript Debugger」というアドオンを入れてみた。
ターゲットアプリケーションにPhotoshopを指定して、デバッグを実行すると自動でPhotoshopが開いてJSXを実行してくれる。なんでもあるなあ。詳しくは以下のサイトなど見てください。
https://liquidjumper.com/photoshop/photoshopcc-visual-studio-code-extendscript-debugger

選択したテキストレイヤーの文字を取得する

app.activeDocument.activeLayerで、いま選択してるレイヤーを取得できる。ちゃんとこのレイヤーがテキストレイヤーかどうか調べてからテキスト情報取得してください。ごめんなさいごめんなさい。
以下、参考記事。参考というか、ほぼこの記事から。

var activeText = app.activeDocument.activeLayer.textItem.contents;

文字の中から漢字だけを抽出する

やる度に忘れるもの第一位、正規表現。
ぐわっと関連記事をググってコピペです。
※どこまでが漢字か、みたいなとこで完全な網羅は難しいらしいので、現実的な範囲で漢字取得ということでご理解ください。フワッとした予防線張っとく。

・ひらがな、カタカナ、漢字を抽出
https://pisuke-code.com/js-check-hira-kana-kanzi/

・regexpでマッチした文字列だけ返す
http://www.tohoho-web.com/js/regexp.htm

・基本的な正規表現一覧
https://murashun.jp/blog/20190215-01.html

・JavaScriptで漢字を表す正規表現
https://stabucky.com/wp/archives/7594

var activeText = "ほげほげ国の王様が来日"
var regexp = /[\u4E00-\u9FFF]/gi;
var txt = activeText.match(regexp)
// 国,王,様,来,日

UIを生成する

UIパーツのつくりかた。こちらもぐわっとググる。
あとは実際PhotoShopの設定画面を眺めて、どんな感じで配置すればそれっぽいかなーというのを見て真似すれば良いと思う。

https://liquidjumper.com/photoshop/photoshop-javascript-gui_01
https://liquidjumper.com/photoshop/photoshop-javascript-gui-images-list
https://dtpscriptin.com/statictext/

JSXの配置方法

よし、できた(めっちゃ説明端折った)。
Macの場合は、以下のディレクトリにJSXファイルを入れる。
すると、PhotoShopから、ファイル>スクリプト>小学校学習漢字_選択テキスト てな感じでメニューに組み込まれる。

Applications/Adobe Photoshop 2020/Presets/Scripts/

できたJSXがこれ

テキストレイヤーを選択して、JSX実行すると検索できます。
テキストレイヤー選択してないとエラー出ます。ごめんなさいごめんなさいごめんなさい知らんがなごめんなさい本当に使うときは各々修正したらええがなごめんなさい。
動作してる様子をキャプチャしてみました。

全てのテキストレイヤーから検索する

スクリーンショット 2021-01-09 9.39.42

使ってみてもらったら、フィードバックがきた。たしかにたしかに。
ということで、レイヤーを選択せずにいきなりJSX実行したら全テキストから検索する流れに修正。​

全レイヤーを取得する
app.activeDocument.layersで全レイヤーを取得できる。

var layers = app.activeDocument.layers;

フォルダかどうか
レイヤーの入れ子を探ってくためにフォルダかどうか調べる方法。

if ( layers[ i ].typename == "LayerSet" )

テキストレイヤーかどうか
取得したレイヤーがテキストレイヤーかどうかはこんな感じ。
あとの処理はだいたい一緒。

if ( layers[ i ].kind == "LayerKind.TEXT" )

できたjsxがこれ

いきなりJSXを走らせたら検索できるバージョンです。
テキストレイヤーがなかったらエラー出るかも。ごめんなさいごめんなさいごめんなさい知らんがなごめんなさい参考まで参考までにしてあとは自己責任やろそんなもんごめんなさい。
動作してる様子を再びキャプチャしてみました。

てなことで

「ん?」って引っかかることがあったらとりあえず作ってみる心の余裕を持っていたいですねー。
興味本位の調査なので、ほんとに使うときは自己責任&さらに修正加えて&ちゃんと学習指導要領で確認してね。

ということでよろしくお願いしますー。