Posted at

「写経」を自動化し、オートで功徳を積める仕組みを作ってみたのでございます。


写経により邪念を滅却し、功徳を積もう

写経は、一字書くたびに一体の仏像を彫ることと同じである、

と言われております。

仏像彫る人が可哀そうじゃね?

昨今の現代社会のストレスに耐え兼ね

私も写経によって心を落ち着かせ、

極楽浄土への功徳を積みたいと思うようになりました。


写経とは?

写経(しゃきょう)とは、仏教において経典を書写すること。

現代の日本で写経と言えば、『般若心経』の書写を指すことが多い。

(参考:Wikipedia


効率的に写経するために

俗世の欲にまみれたエンジニアのみなさまは

常に効率化を考えてしまいがちですね。業(ごう)が深いことです。

効率化の例として、チベット仏教には

マニ車

というものがございまして、

1回転させると1回お経を読んだのと同じだけ、

徳を積んだことになるそうです。

これがなかなかの優れものでして、

水車マニ車、風車マニ車、ソーラーマニ車、など

「オートで功徳を積める」ものが多数出現しております。

ハンドスピーナーマニ車まである模様

しかし、マニ車ではちょっと頑張った感がありません。

そこで今回、「写経感を損なわないようにしながらも

オートで写経できる仕組み」をPythonで作ってみたのでございます。


出来たもの

こちらのgifをご覧くださいませ。

Syakyou02.gif

最終的に動作コード含めて作り方を全てご提示いたします。


重要な方針=真心をこめた一打鍵

幸いなことに、「写経」については、

その手段/フォーマット(使う道具)は問われないと聞いております。

(宗派によるそうです)

そこで、筆⇒キーボード入力、紙⇒電子化、までは許されると仮定できます。


  • ログでバーッと出すような仕組み ⇒ NG

  • キーボード入力の自動化 ⇒ OK

と仮定しました。

仏様の像を彫るような気持ちで真心をこめて、一打鍵ずつ、

ha nn nya si nn gyo u

と入力していけば良いわけですね。


自動化までの道のり


キーボード入力の自動化= pyautogui


インストール

pip install pyautogui


以下のようにして、打鍵の自動化ができます。


pyautoguiの基本的な使い方

import pyautogui

#エンターキーを2回押す
pyautogui.press('enter', presses=2)
#コントロール+V
pyautogui.hotkey('ctrl', 'v')
#任意の文字列のタイピング
pyautogui.typewrite("hannya")


他の使い方詳細は、下記の素晴らしい記事をご参照くださいませ。

https://qiita.com/hirohiro77/items/78e26a59c2e45a0fe4e3


自動化の難題=日本語非対応

当初は、以下のような感じかなーと思っておりました。


失敗例1

pyautogui.typewrite("般若心経")


が、日本語には対応していなかったのです!

そこで ローマ字 + 変換キー にしてみたのですが・・・


失敗例2

#ローマ字で入力させて

pyautogui.typewrite("hannnyasinngyou")
#変換すればよいのではないか?
pyautogui.press('space"', presses=1)


これだと、日本語入力をONにしていれば入力は出来るのですが、

重要な問題:

般若心経の漢字はIMEでほとんどまともに出てこない

変換が効かないんですよね、仮に出てきたとしても、

何番目にその正しい対象があるのか取得は難しいです。


漢字はクリップボードコピペ=pyperclip

そこで、漢字はクリップボード経由で

事前に登録 ⇒ ctrl+V

という形で入力することを思いつきました。

pyperclip を使えばクリップボードに介入できます。


インストール

pip install pyperclip


以下のようにして、クリップボード操作ができます。


pyperclipの基本的な使い方

import pyautogui

import pyperclip

#クリップボードに登録
pyperclip.copy(”般若心経”)
#コピペ
pyautogui.hotkey('ctrl', 'v')


しかし、もし全てctrl+Vだけで写経していたら、

当初の目的であった「写経感」が失われてしまい、

ログを出しているのと同じような感じになってしまいます。

そこで、きちんとキーボード入力を行いつつ、

出力を正しい漢字にするという融合が必要になってきます。

楽して写経しようなどという考えは甘いのです。


写経感の工夫ポイント=ESCキー

pyautogui によってキー入力を行いつつ、

その変換の代わりに、「ESCキー」を連打することで、

入力した内容を消去し、

消去した瞬間にctrl+V作戦を行うことで、

IMEの変換っぽく見せることができる

という画期的な新技術を編み出しました。

コードの詳細は最後の全行コード内でご確認ください。


出来た全部のコード

さあこのコードで、みなさんもオートで功徳を積んでみてください

部屋を暗くして、誰も居ない部屋で

繰り返し回数を多くして実行すると雰囲気が出てオススメです!

環境に応じて多少改変してお使いください。


オート写経コード全文

#!usr/bin/python

# -*- coding: UTF-8 -*-

##PyAutoGUIのモジュール
#pip install pyautogui
import pyautogui

#クリップボードコピペ用
#pip install pyperclip
import pyperclip

import sys
import time

def GijiHenkan(kanji, roumaji, sleeptime):
#roumaji文字列をタイプする(※全角モード前提)
#pyautogui.typewrite(roumaji)
#↑不自然に早いので不採用

#全部の文字を一文字ずつ打つ
for char in roumaji:
pyautogui.press(char, presses=1)
time.sleep(sleeptime)

#変換前にひとこきゅう
time.sleep(sleeptime)

#クリップボードに漢字をコピーしておく
pyperclip.copy(kanji)
#消去した瞬間にクリップボードから文字をコピペ
#消去については環境ごとに異なる可能性があるが、
#escの2回押しにしておく。
pyautogui.press('esc', presses=2)
#コピペ
pyautogui.hotkey('ctrl', 'v')
#ひとこきゅう
time.sleep(sleeptime)

return 0

def Kaigyou(sleeptime):
pyautogui.press('enter', presses=1)
time.sleep(sleeptime)
return 0

def DoSyakyou(sleeptime,kaigyousleeptime):
GijiHenkan("摩","ma",sleeptime)
GijiHenkan("訶","ka",sleeptime)
GijiHenkan("般","hann",sleeptime)
GijiHenkan("若","nya",sleeptime)
GijiHenkan("波","ha",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("蜜","mi",sleeptime)
GijiHenkan("多","ta",sleeptime)
GijiHenkan("心","sinn",sleeptime)
GijiHenkan("経","gyou",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("観","kann",sleeptime)
GijiHenkan("自","ji",sleeptime)
GijiHenkan("在","zai",sleeptime)
GijiHenkan("菩","bo",sleeptime)
GijiHenkan("薩","satu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("行","gyou",sleeptime)
GijiHenkan("深","jinn",sleeptime)
GijiHenkan("般","hann",sleeptime)
GijiHenkan("若","nya",sleeptime)
GijiHenkan("波","ha",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("蜜","mixtu",sleeptime)
GijiHenkan("多","ta",sleeptime)
GijiHenkan("時","ji",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("照","syou",sleeptime)
GijiHenkan("見","ken",sleeptime)
GijiHenkan("五","go",sleeptime)
GijiHenkan("蘊","unn",sleeptime)
GijiHenkan("皆","kai",sleeptime)
GijiHenkan("空","kuu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("度","do",sleeptime)
GijiHenkan("一","ixtu",sleeptime)
GijiHenkan("切","sai",sleeptime)
GijiHenkan("苦","ku",sleeptime)
GijiHenkan("厄","yaku",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("舍","sya",sleeptime)
GijiHenkan("利","ri",sleeptime)
GijiHenkan("子","si",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("色","siki",sleeptime)
GijiHenkan("不","hu",sleeptime)
GijiHenkan("異","i",sleeptime)
GijiHenkan("空","kuu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("空","kuu",sleeptime)
GijiHenkan("不","hu",sleeptime)
GijiHenkan("異","i",sleeptime)
GijiHenkan("色","siki",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("色","siki",sleeptime)
GijiHenkan("即","soku",sleeptime)
GijiHenkan("是","ze",sleeptime)
GijiHenkan("空","kuu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("空","kuu",sleeptime)
GijiHenkan("即","soku",sleeptime)
GijiHenkan("是","ze",sleeptime)
GijiHenkan("色","siki",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("受","jyu",sleeptime)
GijiHenkan("想","sou",sleeptime)
GijiHenkan("行","gyou",sleeptime)
GijiHenkan("識","siki",sleeptime)
GijiHenkan("亦","yaku",sleeptime)
GijiHenkan("復","bu",sleeptime)
GijiHenkan("如","nyo",sleeptime)
GijiHenkan("是","ze",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("舍","sya",sleeptime)
GijiHenkan("利","ri",sleeptime)
GijiHenkan("子","si",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("是","ze",sleeptime)
GijiHenkan("諸","syo",sleeptime)
GijiHenkan("法","hou",sleeptime)
GijiHenkan("空","kuu",sleeptime)
GijiHenkan("相","sou",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("不","hu",sleeptime)
GijiHenkan("生","syou",sleeptime)
GijiHenkan("不","hu",sleeptime)
GijiHenkan("滅","metu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("不","hu",sleeptime)
GijiHenkan("垢","ku",sleeptime)
GijiHenkan("不","hu",sleeptime)
GijiHenkan("浄","jyou",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("不","hu",sleeptime)
GijiHenkan("増","zou",sleeptime)
GijiHenkan("不","hu",sleeptime)
GijiHenkan("減","genn",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("是","ze",sleeptime)
GijiHenkan("故","ko",sleeptime)
GijiHenkan("空","kuu",sleeptime)
GijiHenkan("中","tyuu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("色","siki",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("受","jyu",sleeptime)
GijiHenkan("想","sou",sleeptime)
GijiHenkan("行","gyou",sleeptime)
GijiHenkan("識","siki",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("眼","genn",sleeptime)
GijiHenkan("耳","ni",sleeptime)
GijiHenkan("鼻","bi",sleeptime)
GijiHenkan("舌","zextu",sleeptime)
GijiHenkan("身","sinn",sleeptime)
GijiHenkan("意","i",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("色","siki",sleeptime)
GijiHenkan("声","syou",sleeptime)
GijiHenkan("香","kou",sleeptime)
GijiHenkan("味","mi",sleeptime)
GijiHenkan("触","soku",sleeptime)
GijiHenkan("法","hou",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("眼","genn",sleeptime)
GijiHenkan("界","kai",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("乃","nai",sleeptime)
GijiHenkan("至","si",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("意","i",sleeptime)
GijiHenkan("識","siki",sleeptime)
GijiHenkan("界","kai",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("明","myou",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("亦","yaku",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("明","myou",sleeptime)
GijiHenkan("尽","jinn",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("乃","nai",sleeptime)
GijiHenkan("至","si",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("老","rou",sleeptime)
GijiHenkan("死","si",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("亦","yaku",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("老","rou",sleeptime)
GijiHenkan("死","si",sleeptime)
GijiHenkan("尽","jinn",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("苦","ku",sleeptime)
GijiHenkan("集","syuu",sleeptime)
GijiHenkan("滅","metu",sleeptime)
GijiHenkan("道","dou",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("智","ti",sleeptime)
GijiHenkan("亦","yaku",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("得","toku",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("以","i",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("所","syo",sleeptime)
GijiHenkan("得","toku",sleeptime)
GijiHenkan("故","kou",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("菩","bo",sleeptime)
GijiHenkan("提","dai",sleeptime)
GijiHenkan("薩","saxtu",sleeptime)
GijiHenkan("埵","ta",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("依","e",sleeptime)
GijiHenkan("般","hann",sleeptime)
GijiHenkan("若","nya",sleeptime)
GijiHenkan("波","ha",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("蜜","mixtu",sleeptime)
GijiHenkan("多","ta",sleeptime)
GijiHenkan("故","ko",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("心","sinn",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("罣","kei",sleeptime)
GijiHenkan("礙","ge",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("罣","kei",sleeptime)
GijiHenkan("礙","ge",sleeptime)
GijiHenkan("故","ko",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("無","mu",sleeptime)
GijiHenkan("有","u",sleeptime)
GijiHenkan("恐","ku",sleeptime)
GijiHenkan("怖","hu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("遠","onn",sleeptime)
GijiHenkan("離","ri",sleeptime)
GijiHenkan("一","ixtu",sleeptime)
GijiHenkan("切","sai",sleeptime)
GijiHenkan("顛","tenn",sleeptime)
GijiHenkan("倒","dou",sleeptime)
GijiHenkan("夢","mu",sleeptime)
GijiHenkan("想","sou",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("究","ku",sleeptime)
GijiHenkan("竟","kyou",sleeptime)
GijiHenkan("涅","ne",sleeptime)
GijiHenkan("槃","hann",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("三","sann",sleeptime)
GijiHenkan("世","ze",sleeptime)
GijiHenkan("諸","syo",sleeptime)
GijiHenkan("仏","butu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("依","e",sleeptime)
GijiHenkan("般","hann",sleeptime)
GijiHenkan("若","nya",sleeptime)
GijiHenkan("波","ha",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("蜜","mixtu",sleeptime)
GijiHenkan("多","ta",sleeptime)
GijiHenkan("故","ko",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("得","toku",sleeptime)
GijiHenkan("阿","a",sleeptime)
GijiHenkan("耨","noku",sleeptime)
GijiHenkan("多","ta",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("三","sann",sleeptime)
GijiHenkan("藐","myaku",sleeptime)
GijiHenkan("三","sann",sleeptime)
GijiHenkan("菩","bo",sleeptime)
GijiHenkan("提","dai",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("故","ko",sleeptime)
GijiHenkan("知","ti",sleeptime)
GijiHenkan("般","hann",sleeptime)
GijiHenkan("若","nya",sleeptime)
GijiHenkan("波","ha",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("蜜","mixtu",sleeptime)
GijiHenkan("多","ta",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("是","ze",sleeptime)
GijiHenkan("大","dai",sleeptime)
GijiHenkan("神","jinn",sleeptime)
GijiHenkan("呪","syu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("是","ze",sleeptime)
GijiHenkan("大","dai",sleeptime)
GijiHenkan("明","myou",sleeptime)
GijiHenkan("呪","syu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("是","ze",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("上","jyou",sleeptime)
GijiHenkan("呪","syu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("是","ze",sleeptime)
GijiHenkan("無","mu",sleeptime)
GijiHenkan("等","tou",sleeptime)
GijiHenkan("等","dou",sleeptime)
GijiHenkan("呪","syu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("能","nou",sleeptime)
GijiHenkan("除","jyo",sleeptime)
GijiHenkan("一","ixtu",sleeptime)
GijiHenkan("切","sai",sleeptime)
GijiHenkan("苦","ku",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("真","sinn",sleeptime)
GijiHenkan("実","jitu",sleeptime)
GijiHenkan("不","hu",sleeptime)
GijiHenkan("虚","ko",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("故","ko",sleeptime)
GijiHenkan("説","setu",sleeptime)
GijiHenkan("般","hann",sleeptime)
GijiHenkan("若","nya",sleeptime)
GijiHenkan("波","ha",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("蜜","mixtu",sleeptime)
GijiHenkan("多","ta",sleeptime)
GijiHenkan("呪","syu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("即","soku",sleeptime)
GijiHenkan("説","setu",sleeptime)
GijiHenkan("呪","syu",sleeptime)
GijiHenkan("曰","watu",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("羯","gya",sleeptime)
GijiHenkan("諦","tei",sleeptime)
GijiHenkan("羯","gya",sleeptime)
GijiHenkan("諦","tei",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("波","ha",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("羯","gya",sleeptime)
GijiHenkan("諦","tei",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("波","ha",sleeptime)
GijiHenkan("羅","ra",sleeptime)
GijiHenkan("僧","sou",sleeptime)
GijiHenkan("羯","gya",sleeptime)
GijiHenkan("諦","tei",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("菩","bo",sleeptime)
GijiHenkan("提","ji",sleeptime)
GijiHenkan("薩","so",sleeptime)
GijiHenkan("婆","wa",sleeptime)
GijiHenkan("訶","ka",sleeptime)
Kaigyou(kaigyousleeptime)

GijiHenkan("般","hann",sleeptime)
GijiHenkan("若","nya",sleeptime)
GijiHenkan("心","sinn",sleeptime)
GijiHenkan("経","gyou",sleeptime)
Kaigyou(kaigyousleeptime)
Kaigyou(kaigyousleeptime)
Kaigyou(kaigyousleeptime)

return 0

#以下、メインルーチン
if __name__ == "__main__":

#実行前の待機(秒)
print("5秒後に写経が始まります。")
print("心を静かにして")
print("テキストエディタを開いて、")
print("日本語入力モードにしておきましょう。")
time.sleep(5)

sleeptime = 0.0015
kaigyousleeptime = 0.02

#写経開始
#強制終了(ctrl+c)するときにキーボード入力が継続されてしまうので
#実行する際には注意。
#繰り返し回数は最初は1回だけなどにしておいた方がよい
for var in range(0, 3):
DoSyakyou(sleeptime,kaigyousleeptime)

print("おつとめおつかれさまでした。")
sys.exit()



あとがき

写経を(自動で)していると、

心が洗われるような感じがいたします。

特にエンジニアのみなさまにおかれましては、

「コンピュータが何か頑張っている感の様子を見ること」

だけでも心が洗われる、という統計結果が出ております。

(エンジニア3名に聞いてみた7つの心理的安全性 ~~民明書房~~)

プログラム起動中は他の作業は一切出来ない「禅仕様」ですので、

ぜひみなさまも、

お忙しいなかの日常にも写経というオアシスを

取り込んでみてはいかがでしょうか?

また、日ごろお世話になっているみなさまへの感謝を込めて

1いいねごとに1回、

心を込めた自動写経を代行させていただきます。

ぽちっと押すだけで功徳を積める、Qiita史上最高に徳の高い記事です。


写経だけではなく読経したい方へのオススメ

以前ご紹介させていただいた、日本一の速読アプリにも、

般若心経を速読or念じられるモードを搭載しております。

訓練不要で誰でも速読!日本一の速読アプリ「瞬間速読」の個人開発物語(25万DL)

よろしければこちらもぜひご参照くださいませ。


ツッコミ

って、プログラムの「写経」じゃなくて、

ホンモノの「写経」の話だったんかーい!!!!

誰かの心の声が聞こえたような気がいたします。

悟りをひらいた仏様は「六神通」という超能力をお持ちで、

その一つ「他神通」では「他人の心を知る事ができる能力」があるそうですが、

私も本記事で沢山の功徳を積んだことで、

そのひとつに目覚めつつあるのかもしれません。

今回は、このツッコミをここまでひっぱって書くことと、

途中のお経データ入力が一番大変でした。

以上です。