今回はMacにもともと搭載されているCronという機能を使って、特定のPythonプログラムを設定された時刻に自動実行させる方法を解説します。
この機能を思い通りに使えるようになると、Macに自動的に、繰り返し業務を行わせることができるようになります。
色々な場面、目的に利用でき、うまく利用すると皆さんの業務の効率化に役立つこと間違いなしです。
実行プログラムとフォルダーの作成 cron-63それでは、この記事では特定の時刻にMacにその時の時刻を発音させるPythonのプログラムを実行させることにします。
実は、本来のMacの機能を使って、15分おきに時刻を読み上げることは可能ですが、実感しやすい機能として時刻の読み上げを選びました。また、この方法だと、時刻だけでなく、好きな言葉をMacに話させることができる音声合成の機能にも触れることができます。
PythonとJupyterLabの実装が必要です。まだ実装されていない方は、以下の僕のブログ記事から実装方法を学んでくださいね。
JupyterLabとJupyterNotebookの違いを簡単に解説
まずはターミナルを起動して、必要なPythonのライブラリーのインストールを行います。
ターミナルて何?。という方は、以下のぼくのブログ記事を読んでみてください。
まず、以下の3つのPythonのライブラリーをターミナルを使ってインストールします。
datetime
pandas
pyttsx3 version2.7 (実際にはversion2.71がインストールされます。)
それぞれのライブラリーを上記のスクショに従って個々にインストールします。ターミナルを使われたことがある方は、ご存知だと思いますが、実際に入力するのは「$」の右側だけです。
インターネットの環境にもよりますが、それほど時間がかからず、インストールが終了するはずです。また、コンピュータの環境によっては、「pip」を「pip3」に変更する必要がある場合があります。まずは「pip」使ってみて、うまくいかなければ「pip3」で試してみて下さい。(理由はMacにはもともとPythonの2系(Python version 2XX)がインストールされているため、環境設定によっては、pipを使った場合、ライブラリーが2系のPythonにインストールされてしますからです。)
それでは次にJupyterLabを開いて以下のPythonプログラムをセルにコピペして下さい。
import pyttsx3 import datetime import pandas as pd def TextToSpeech_pyttsx3(ph): engine = pyttsx3.init() voices = engine.getProperty('voices') engine.setProperty("voice", voices[18].id) engine.say(ph) engine.runAndWait() hour = str(datetime.datetime.now().strftime('%H')) minute = str(datetime.datetime.now().strftime('%M')) if hour[0] == "0": hour = hour[1] if minute[0] == "0": minute = minute[1] if minute == "0": TextToSpeech_pyttsx3("現在の時刻は" + hour + "時です。") else: TextToSpeech_pyttsx3("現在の時刻は" + hour + "時" + minute + "分です。") cron-33この記事からコードのコピーの仕方は、カーソルを黒いコードの部分に置くと(ホバーさせると)最上段にメニュが現れるので、矢印のアイコンをクリックするとコードが全てコピーされます。(直上のものは方法を示すスクショなので、その上のコードをコピーして下さい。)
cron-49そして、ターミナルに戻り、「Decuments」フォルダーの下に「cron」フォルダーを作り、cdコマンドでそこに移動したから、以下のように「Jupyter Lab」と入力してJupyterLabを起動します。(JupyterとLabの間には半角のスペースが必要です。)
cron-48NotebookのPython3をクリック。
cron-47そして、セルにコピーしたPythonのコードをペースとして、そのセルを選んだ状態(セルの周りが薄い青色になり、左側に青色の縦線が現れる。)で矢印の三角アイコンをクリックするか、「shift」キーと「return」キーを同時に押すと該当部分のセルのコードが実行されます。
ここでは、現在の時刻が読み上げられるはずです。
それではcronの設定を始めます。まずはMacの「書類」フォルダーの下に「cron」というフォルダーを作ります。
そして、JupyterLabのセルにコピペしたコードをPythonのプログラムに変換(voice-clock.ipynbをvoice-clock.pyに変換)して、先ほど作った「cron」フォルダーの中に移動します。
ファイルの変換方法は以下のぼくの記事で解説しています。参照してください。
JupyterLabとJupyterNotebookの違いを簡単に解説
cronからコンピュータ上のファイルへのアクセスを可能にする cron_01そして、まずは上記の「システム環境設定アイコン」をクリックします。
cron_02「セキュリティーとプライバシー」アイコンをクリック。
cron_03そして、「プライバシー」をクリック。
cron-04下の方にある「フルディスクアクセス」を上にあげて、クリック。
cron-05R①の鍵アイコンをクリックして鍵を開け、②にMacを起動する際のパスワードを入力します。
そして、③の「ロックを解除」をクリックして、④の「+」をクリック。
そして、「Command」キー、「Shift」キーと「G」キーを同時に押すと、②フォルダーの場所を入力するためのポップアップメニューが現れるので、小文字「usr/sbin/cron」と入力して、③の「移動」をクリック。
cron-09そして、①「cron」が選択されていることを確認して、②「開く」をクリック。
cron-10①にVチェックが入っているのを確認して、②の鍵のアイコンをクリックして鍵を閉じます。これで、cronからファイルにアクセスが可能になりました。
cronを記述するエディターVimの設定 cron-66 cron-20それでは、先ほどPythonのライブラリーをインストールした「Terminal」に戻って、以下のコマンド「export EDITOR=vim」を入力してcronを記述するエディターにVimを指定します。
cron-21次に「echo $PATH」と入力、「return」キーを押します。
cron-22すると上記なような表示になるので、赤い四角で囲まれている部分をコピーしておきます。
cron-23次に上記のように「crontab -e」と入力してVimエディターを開きます。
cron-24初めてVimを開いたときは、上記のようになり、この状態では何も表示されません。
cron-40ここで、Vimの記述方法を少し変更して、記述しやすくします。ターミナルに戻って、
「vim ~/.vimrc」を入力し「return」を押します。
vimの上記のような画面が表示されます。ここで、INSERT(入力)モードに移動するために「i」キーを押します。
cron-41Rすると下記にのように画面の下部に「-- INSERT --」の表示が現れ、入力モードに入ったことがわかります。
それでは、以下のコードをコピペして、Vimの画面に貼り付けます。
set number set backspace=indent,eol,start set backupskip=/tmp/*,/private/tmp/* cron-44
それぞれのコマンドの意味は以下の通りです。
set number : 行番号を表示します。
set backspace=indent.eol.start:入力モードでdeleteで削除できるようにする。
set backupskip=/tmp/*,/private/tmp/*:Vim終了・セーブ時のエラー回避。
それでは、「esc」キーを押して、「:」、「w」、「q」と順にキーを押して、Vimの内容をセーブして終了します。
cron-45すると、ターミナルの画面に戻るので、上記のように「crontab -e」と入力して、おもむろにVimの画面に戻ります。
そして、「i」キーを押して入力モードに入り、(左下に「-- INSERT --」と表示されます。)
上記のコードをコピーして、Vimに貼り付け以下のようにします。また、「PATH=」の後には、先ほど、コピーしてJupyterLabに一時保存じたパスをペースとし、(ユーザー名)のところにはMacのユーザー名を代入します。
cron-50Rこの後、「esc」キーを押して入力モードを脱して、「;」「w」「q」(全て半角)を押してVimの変更点をセーブしてVimからターミナルへ移ります。途中で以下のような注意文が出ますが、「OK」をクリックしてください。
cron-51これで問題なければ、みなさんのMacは15分おきに「現在の時刻は3時15分です。」と女性の声で時刻を読み上げてくれます。
また、作動がちゃんと行われることを確認するため、初めのうちは15分沖でなく、1分おきにcronを動かせるように「15」の代わりに「1」を設定してください。これで1分おきに時刻を読み出します。
それでは cronの日時の設定を簡単に説明します。
まず「#」は以下の文をコンピュータが実行しなくなるマークアウト記号です。注意書きや一時的にコマンドの実行を取りやめる時に使います。
日時の設定は
(分) (時) (日) (月) (曜日)
30 5 * * *
であれば、毎日、午前5時30分にcronが起動します。「*」は毎回という意味です。
また、/15は15おきにという意味です。
(分) (時) (日) (月) (曜日)
/20 5 /2 * *
であれば、毎月の偶数日の午前5時、5時20分、5時40分にcronが起動します。
また、曜日の設定は0=日曜日、1=火曜日でずっと続いて6=土曜日、最後で7=日曜日となります。
(分) (時) (日) (月) (曜日)
5 5 * 4 0
であれば、4月の日曜日の午前5時5分にcronが起動します。
みなさんで、色々と試してみてください。
また、cronの機能を中断するには、該当部分をマークアップ(「#」を行の頭に置く)することによっておこなってください。
駆け足で、cronを使うための最低限の項目を、なるべく初心者の方でもわかるように簡単に解説してきました。
cronやVimに関してもっと解説したいことはあったのですが、あまり盛り沢山になると最後までたどり着くのが困難になるような気がして、本記事では、最低限の解説にとどめています。
1記事で解説できるのは、ぼくにはこれが限界のような気がしています。
Pythonでは本当にたくさんのことを実行することができます。
今回説明しましたcronにより、それらの自動実行が可能になり、Pythonの活用の幅も広がることと思います。
それでは、最後までお付き合いいただきありがとうございました。さようなら。
おすすめプログラミングスクールテックキャンプ エンジニア転職
ビジネス系YouTuberとして著名なマコなり社長が社長を務める株式会社Divが運営するTECH CAMP。
やり切れる教材と就職までのサポートが大きな強めです。
また、受講の際には各自Macを準備する必要があります。(有料でレンタルあり)就職できなければ授業料返還の保証がありますが、39才以下との条件があります。ご注意ください。
費用は短期集中で一括払いで総額税抜648,000円、夜間・休日で848,000円と安くない費用になります。
コロナの影響で閉鎖していた教室もマスク着用などの条件付きで、全室、2020年11月2日より使用可能になりました。
眺めていても何も始まりません。これを機に、まずは以下のリンクから無料カウンセリングを受けられてみてはいかがでしょうか。
■教育について ・圧倒的コミット量と網羅性 テックキャンプ エンジニア転職は600時間をかけてフロント/サーバーサイド/インフラ全てを一通り学びます。
■サポート体制について ・学習環境 オンライン問わずメンターに質問し放題なため、途中で諦めてしまうことがありません。 ・専属のトレーナーの存在 トレーナーは毎週の学習計画の作成、日々の進捗確認、 キャリアアドバイザーへのフィードバックなど期間中は二人三脚となってサポートします。 ・専属のキャリアアドバイザー 毎週のキャリア面談、面接対策や履歴書の添削、企業提案など転職が決定するまでサポートし続けます。 また、企業に入社した後も半年間であれば無料でキャリア相談を受け付けています。
受講スタイル:通学またはオンライン
場所:東京(渋谷)、大阪、名古屋、福岡
価格:
入会金不要で月々21,200円(税込)から、一括は648,000円(税抜)(短期集中)
主な学習言語:HTML/CSS、JavaScriptRuby on Rails等
期間:短期集中で10週間、夜間・休日で6ヶ月