先日は、
■ OSに実装されている機能でプログラミング 【 プログラミング 】
-にてWINDOWSに実装されている.NET Frameworkでcsc.exeを使ってC#を使ってみました。先日も触れたように3.5も用意されていますが、4.xよりも3.5の方が長期サポートになっているようですが、機能面ではかなり違うのでOSの実装されているものと現行のものでは結構違う物になっています。
PCを導入すると、自動処理をする為の環境やコーディングによってアプリケーションを制御したり、先日紹介したように、C#やHTMLで骨組みを作って、CSSでデザインを行い、動的な処理をJavaScriptで実装する事でオフラインでも動作する物を作る事が出来ます。
先日使ったPoweShellですが、コマンドプロンプトを拡張した物物になりますが、Powershellでは、コマンドレットで処理をまとめてあるので、コマンドプロンプトを使用すると少し複雑になる物もコマンドレットで実装されているので、記述をコマンドプロトよりも簡素にして複雑な事が出来るようになります。
Powershellでは、Pythonのような対話式な処理もできるので、
のように変数の定義をして処理が出来るのですが、変数を文字列として記録して処理をしたり
のよう計算や文字列の結合もできます。PoweShell自体はセキュリティー上ps1ファイルはダブルクリックで実行できない仕様になっているので呼び出して使用するような流れになっていますが、Windows.Formsを呼び出す事でGUIを使った処理もできるようになっています。
PowerShell自体がコマンドプロンプトの拡張版のような物ですから、コマンドプロンプトと同じようにファイルを用意して実行できる仕様になっています。
コマンドプロンプトは、コマンドを実行できるのですが、これをコマンドプロンプトではなく、テキストファイルに処理の流れを書いて複数の処理を実行できるようにした物がバッチファイルになります。
こうした機能をもう少し拡張してバッチファイルだと結構なコードの中さになる物をもう少し簡素に書けて機能を増やしたものがPowerShellになります。
バ ッチファイルの利便性
バッチファイルのイメージですが、マインクラフトのコマンドに似ています。
マインクラフトではクリエイティブモードでコマンドを使う事になりますが、回路のテストやワールドを作った時に夜景の状態を見たいときにコマンドを使います。
トラップタワーを作った場合も湧き効率を見る場合だと、ピースフルとハードを入れ替えて状態変化を見ることになりますが、統合版だとティックの変更で本当にスポーンしているのかも確認できますし、自動収穫機のモジュール(こうしたものはクラスター化させて運用するので、モジュールを作って併設して運用する事になります。)の成長効率を見る場合にも使えますが、ワールド内に仕掛けを作る時にコマンドブロックを使って通常のサバイバルのワールドでは存在しない機能を実装してそのワールドだけのルールを作って遊べるようにする事が出来ます。
プログラミング言語の場合、このクリエイティブのワールドの自由度をさらに広げた物になりますが、マインクラフトのコマンドはチャット欄で打ち込むと記述の候補がスニペットのように表示されるのでそれを参照して使っていく事が出来ますが、この状態だとワールドを開いた時にルールが実行されたり、レッドストーン回路では制御できないスコアボードを使った表示などの機能も使う事が出来ません。また、レッドストーン依存ではなく、コマンドブロックで生成した値の変化で動作するような物や空間検知(これが、コマンドだと出来ます。)のような物も使えません。その為、手入力ではなく、用意された処理を実行する事で動作するように出来る仕様になっています。
この関係性を見ると、
■ コマンドプロンプト : 手入力
■ バッチファイル : 登録済みの物
なので、バッチファイルにしてしまえば、そのファイルの実行だけで登録した内容を行えるようになっています。1つの命令だけで考えると、コマンドブロックにに近い状態になります。先日使った
は、1つの命令を1つのファイルに格納しているので、マインクラフトのコマンドブロックに似た状態になっています。
マインクラフトのコマンドブロックの場合、こう言った機能を1つのブロックに対して1つ実装する事で動作する仕様になっていますが、これをブロックの特性に合わせて使用する事で、
■ 逐次処理
■ 反復
を構築する事が出来ます。条件分岐はコマンドブロックで実行できるのですが、無限ループや回数指定ループなども作る事が出来ます。
基本的に、コマンドブロックも物理的な流れなので、レッドストーン回路のように直列回路と並列回路を組むことで、1つのプロセスだけで動いている逐次処理と複数のプロセスで動いているような並列処理の構造を作る事が出来ます。この辺りは、
■ 並列回路で制御する
■ コマンドブロックの処理単位で分ける
事で実現できるようになっています。この時に、コマンドブロックで複雑な事をしようと思うと、コマンドブロックの数が増えてしまうのですが、マインクラフトでは、ビヘイビアパックを作る事で処理の流れを1つのコマンドブロックに格納できるようになっています。それがfunctionコマンドになりますが、コマンドによる処理の流れを関数化して1つの関数としてファイルに登録し、それをビヘイビアパックにまとめて保存しておき、そのファイルをfunctionコマンドで呼び出して実行する事で、複数のコマンドブロックを使う条件であっても1つのブロックだけで制御できるようになります。つまり、1つのブロックで1つの関数を実行するような構造にする事が出来る仕様になっています。
バッチファイルもコードと同じなので、逐次処理で流れを作る事が出来ます。その為、これを使うと一つのファイルで複雑なsyロ位を実装できるようになっています。
先日の事例だとバッチでcsc.exeを実行していますが、この仕様を見ると 【 プログラムを開くことが出来る 】 ので、ライブ配信のように複数のソフトウェアを同時に立ち上げるような条件だとバッチファイルで管理したほうが作業がしやすくなります。
まず、ライブ配信をする場合、OBSやプレイヤーソフトや使用するソフトを同時起動する必要がありますが、この場合、配信の準備をする前に 【 全て手動で開く必要がある 】 ので、少し煩雑だったりします。とは言っても配信で用意する素材をOBSで登録しておいて切り替えれるようにする倍にはその準備は必要になりますが、 【 ソフトの同時起動 】 のような物だと得意としています。
この場合、必要な物を立ち上げておけばいいので、先日のようにファイルの指定をすると実行できますし、必要なWEBページを表示したい場合だと、startで実行できるので、
start 対象のURL
を指定すると、対象のページを表示できます。その為、
start YouTubeのURL
start TwitterのURL
のようにすると、バッチファイルの実行時にYoouTubeとTwitterをWEBブラウザで開くことができます。と言う事は、
OBSの絶対パス
音楽プレイヤーソフトの絶対パス
プレイするゲームの絶対パス
start YouTubeのURL
start TwitterのURL
を指定したバッチファイルを用意しておくとバッチファイルの実行だけでこれを同時に立ち上げることができます。
これがバッチファイルの利便性になりますが、実行時に立ち上げるだけだとこうした処理の記述だけなので、嘘のような簡単な記述をするだけで実行できるようになりますが、スタートメニューから複数のアプリケーションを立ち上げて作業をする事を考えるとバッチファイルを使うと煩雑な作業をなくすことができます。
あと、バッチファイルを使うと、【 特定の時間にファイルに実行 】 をする事もできるで、PCの起動をさせた状態でバッチファイルの実行をするだけで特定の時間に特定のプログラムを開くような事も行えるようになります。
その為、バッチファイルだけで処理のスケジュールを組んでそれを時間単位で実行していくような事が出来るのですが、OSの標準実装機能を使うだけでも色々な事が出来るようになっています。
P Cの標準機能
前述のように、手作業だと少し煩雑な物もバッチファイルを使うと自動化が出来るわけですが、スケジュール通りに動く物も時間の指定を行う事で利用できます。とは言っても、MS DOSで動かしているのではなく、WINDOWS環境で動作させている場合だと、前の世紀から 【 タスクスケジューラー 】 が用意されているので、それを使う事で、指定した時間にプログラムの実行をする事が出来るようになっています。
その為、先程の 【 配信用のソフトの同時起動 】 のような物も配信前の準備をする時間を決めておいて、実行するようにしておくと、 【 PCが立ち上がっていればそのソフト群れが時間になると自動で立ち上がる 】 ようにできます。
その為、処理のスケジュールを時間単位で行う場合だと、タスクスケジューラーでスケジュールを登録しておくだけでそれが実行できるので、作業で必要になるソフト群れを同時起動できるようなバッチを用意しておくだけで、作業がしやすくなりますし、時間が決まっている場合だと、 タスクスケジューラーで管理する事で時間の指定までできるようになります。
■ タスクスケジューラー
WINDOWSの標準実装機能として、タスクスケジューラーが存在しますが、これを使うと、特定のスケジュールに合わせてソフトウェアの実行が出来るようになります。
メニューの中に
のように用意されているので、それを開くと、
の用が画面が表示されますが、タスクの指定は、右側のペインの項目から行う事になります。右側を見ると、
のようになっていますから、ここから、
■ 基本タスクの作成
■ タスクの作成
を指定できるのですが、今回は基本タスクを指定する事にします。選択すると、
のようにタスク名と説明を書くことになるので、何をしているのか解りやすくするためにそれを描く事になりますが、
のように名称と説明を付けたら次にを選択します。すると、
のように起動する条件が指定できるので、
■ 毎日
■ 毎週
■ 毎月
■ 一回限り
■ コンピューター起動時
■ ログオン時
■ 特定イベントのログへの起動時
から選択できます。今回は一回限りを指定して次に進みます。
すると、
のように起動する日時の指定になるので、これを設定する事になります。タイムゾーンを参照するとその地域におけるその表記の
時間での駆動を指定する事が出来ます。
そして、挙動の指定ですが、
のように
■ プログラムの開始
■ 電子メールの送信(非推奨)
■ メッセージの表示(非推奨)
がありますが、今回はプログラムの開始を選択して次に進みます。すると、プログラムの選択になるので、
のように参照をクリックしてプログラ区を選択するか、プログラムの絶対パスを 【”】 で囲んで指定する事でプログラムを指定して動作するようにします。これで設定が終了するので、次にに進むと、
のようにスケジュールが登録できるので、指定した時間に特定の挙動をするプログラムを実行できるようになります。
■ タスクマネージャーとプログラム
アタスクマネージャーの場合、指定したプログラムを指定した条件で起動できるようになるので、
■ 毎日
■ 毎週
■ 毎月
■ 一回限り
■ コンピューター起動時
■ ログオン時
■ 特定イベントのログへの起動時
の条件で
【 1つのタスクで1つのプログラムの実行が可能 】
になっています。その為、任意のプログラミング言語で作ったアプリケーションのランチャーソフトを用意した場合、ログオン時に起動するような仕組みにしておくと、それが立ち上がるようにする事が出来ます。と言っても、WINDOWSの機能で 【 スタートアップ 】 のが出来るので、どちらで管理するのかで変わってきますが、タスクマネージャーから管理できるので目的によって使い分けることになります。
タスクマネージャーは先程のように 【 1つの処理 】 を起動する物ですから同時起動は出来ません。そこで、バッチファイルなどを使った 【 1つのタスクでの同時起動 】 などを実装する事で、処理を簡素化して、意図した時間に立ち上げる事ができるようになります。
その為、未実装な機能だと自作すればそれを動作させることが出来るので、複数のアプリを立ち上げたり、自動処理をするような物を定期的に動かす場合だと、バッチファイルと組み合わせると複雑な事が出来るようになります。
先ほどのような配信時に起動する物を一度に実行する場合だと、配信の準備は別に行っておくとしても、配信前のチェックをする場合には同時起動をして確認をする事になると思います。この場合、手作業で立ち上げると煩雑ですし、PCが立ち上がっている場合だと、自動で立ち上がっる指定にできるので、立ち上げる時間をスケジュールで指定しておくだけでソフトを立ち上げる手間を省き確認作業に入る事が出来ます。
■ スタートアップ
前述のようにタスクスケジューラーを使うとPCにスケジュールを指定しておいて、特定の時間になった時にその処理を行ってもらうような事が出来るわけですが、バッチファイルやPoweShellなどを使うと色々な事が出来るようになっています。
WINDOWSの場合だと、
■ バッチファイル
■ PowerShell
■ .NET Framework
■ WSH
なども使用できるようになっていますが、こうした処理を実装できる物を使用する事で、自動化を行う処理をスケジュールを使って実行する事が出来るようになります。
また、バッチファイルのように同時起動が出来る物もあるので、メガタスクをする際の準備や複数の物を同時に動かす場合にもスケジュールでの管理を行って実行できるようになっています。
この場合、内部処理のタイマーの管理ではなく、構造物の実行の有無なので、動作する条件の指定になりますが、PCの起動時に常に決まったソフトを立ち上げるという条件だと、スタートアップを使う事になります。
スタートアップは、
■ スタートアップ
PCが立ち上がってOSが起動した後に実行できる
アプリケーションを指定できる機能
になりますが、エクスプローラーを開いてバーに対して
のように
shell:startup
と打ち込むと
のようにスタートアップに移動できます。通常は、
のように何も入っていないはずなので、ここに立ち上げるソフトウェアを追加する事で、PCの起動後に追加したソフトを起動する事が出来るようになります。
例えば、PCを起動した後に、Scrachが自動で立ち上がるようにしたい場合だと、ここにScratchを追加しておけば、PCの起動後にScratchが立ち上がるようになります。
この時にスタートメニューを介さずにボタンやUIでソフトウェアの選択が出来るアプリケーションランチャーを用意したい場合も、起動時に立ち上がる必要がありますから、スタートアップに追加する事になります。
スタートアップの場合だと、指定された物が同時起動できるのですが、 【 常に実行される 】 と言う条件になります。その為、違うソフトを起動時に実行するような事が出来ない仕様になっています。
その為、コンピューターを使って学習をする際に
■ Scratch
■ オフィースソフト
■ VisualStudio
■ Anaconda
■ R Studio
を時間割ごとに立ち上げたり、日付によって立ち上げる時間が違っている場合には、スタートアップでは対応できないので、この場合にはタスクスケジューラーで管理する事が出来ます。
■ レジューム
これもBIOSが32bitの時代から存在する機能なんですが、PCのスケジューリングは、OS上の層アだけでなく、PCの稼働についても指定できます。これはBIOSのレジューム機能で対応できる物になりますが、この指定で時間を指定して立ち上がる設定ができますが、その時代から存在する機能の中にハードウェアWOLがあります。
■ WOL
これは、LANでシャットダウン中のPCのNIC(注:これはオンボードのNIC専用になります。)にマジックパケットを送る事でPCを立ち上げることが出来るようになります。
とは言ってもPC側とBIOS側で指定する必要がありますが、
■ WOL対応のNICであること
■ 電源管理の設定が出来ている事
■ BIOSでWOLが使える状態になっている事
の3つの条件を満たす必要があります。WOLには、
■ ハードウェアWOL
■ ソフトウェアWOL
が存在していて、ソフトウェアWOLの場合、外付けのNICでもWOL対応の製品であれば使用できます。これはソフトウェアですから、WINDOWS 10が制御している物になりますから、ソフトウェア的な動作しか出来ません。その為、シャットダウン状態からの起動は出来ず、
■ ソフトウェアWOL
■ スリープ状態(S3)
■ 休止状態 (S4)
のみで動作する物になります。ハードウェアWoLはマザーボード側で動作している物なので、シャットダウンした状態からPCが稼働する状態にすることができますが、ソフトウェアWOLのようにOSレベルで動作する部分には対応していません。その為、S3とS4のステートメントからの復帰が出来ない仕様になっています。その為、ハードウェアWOLでは、
■ ソフトウェアWOL
■ シャットダウン時
からの起動のみに対応しています。また、この二者ではハイブリッドシャットダウンからの復旧は出来なくなっています。
この設定方法ですが、それぞれ異なる方法を用いることになるので、何をするのかで使い分けることになります。
現在のIntelのプロセッサだと、vProが実装されているので、これを使うとWOLのように操作側のOSの起動した状態と言う条件が存在しない物もありますが、BIOSが32bitの時代でもネットワークを使用した状態でLAN上のPCを同時に起動する事が出来るようになっています。
その為、複数台のPCを用意してLANで管理をする場合、リモートで起動などを行う事が出来るようになっていますが、教室に据え置きされている端末の起動の処理だとWoLやvProで行えますし、バッチ処理を使うと各端末への自動ログインも可能なので、端末の管理を全てお行っている条件だと、同時に起動してメンテナンスをする場合の処理も行いやすくなっています。
個人が使う場合だと、一つの端末と考えることができますが、2台体制で動かしている場合だと、マジックパケットで宇起動するようなハードウェアWOlが使える状態だと、別の端末でマジックパケットをLAN経由で実行すると複数台のPCを自動で起動させることが可能になります。
こうしたLAN経由の物はWANに繋ぐものの場合だと使うかどうか考えてしまいますが、電源のスイッチに触らなくてもPCが起動する状態というのは特別な事でも何でもないというのはイメージできるのではないかな?と思います。
あと、WOLについては、ITパスポート検定(旧シスアド)でも登場しているので、特別なテクノロジーでもなんでもないのですが、現在だとコンシューマのPCのマザーボードにも標準実装機能のように搭載されている物なので、ごく当たり前に使える機能になっています。
■ リモートデスクトップ
これは、セキュリティー的に安易に使うものではないのですが、WANに繋がない状態で端末の同時管理をする場合だとかなり使える機能になります。
リモートデスクトップを使う事例だと、Raspberry PIのようにPCの状態にすると用途的に扱いにくくなるような状態で使用している場合に、NICで通信を行ってその制御をPC側で行えば、直接稼働しているRaspberry PI側に触れることなくコントロールが出来るのでメンテナンスや調整が出来るようになります。
この時にVNCを使う事になりますが、リモート設定にするとバッチでログインとかができる(ので、WANやLANでからアクセスされて操作されるとかなり酷いことになります。その為、リモートデスクトップやサーバのような機能は、通常のWANに繋がったクライアント用途でしか使わないような端末では機能しない状態にしておく必要があります。その為、オフラインで動作する物で指定した端末以外のアクセスが不可能なLAN環境で使用することになります。)ので、WOLで立ち上げてバッチでログインして、リモートでスケジューリングを指定したり、バッチを書いてそれを同時起動するような事もできるわけですが、利便性が高い反面、そう言った機能を使わない環境と比較すると安全性は低下するという問題があります。その為、インターネットに接続するような条件だと、簡単にバックドアが出来てしまうようなリモートデスクトップの状態は作らない方がいいのですが、こうした物を使う場合には、経路自体で安全性を担保する必要があるので、WANはISPの管轄なのでどうしようもありませんから、個人の場合だと、引き込み先のルーターを含めたLAN側での経路の堅牢性を高める必要があります。
■ WINDOWS 10の場合
前述のようにいろいろな機能が使用できるようになっているので、自動化や処理の実行についてもスケジュール管理がおこなえるようになっているわけですが、WINDOWS 10の標準機能だと、開発者向けの機能としてWSL2が使用出来るので、設定をするとLinuxコマンドをWINDOWS上で使用できるようになるので、ネイティブでCやC++のコンパイルが出来るようになります。Linuxの場合、リモートデスクトップではなく、SSHを使う事になりますが、これも管理者向けの機能で用意されています。
Pro版になると、Hyper-Vが使用できるので、仮想マシンを作る事もできますから、バージョンで実装されている機能が違っています。