Author Archives: day-journal

Try #008 – VBAのモダンな開発環境を構築してみた

 

 

5年ぶり?、10年ぶり?くらいにExcelVBAでの開発案件がありそうなので事前にできるだけモダンな開発環境を構築してみようと思います。

通常VBAはExcel等のソフト内のエディタ(VBE)で開発し、モジュールの共有化やバージョン管理が難しい開発環境です。そのため今回は、VBE以外の外部エディタを利用したり、GitHubでバージョン管理や差分抽出ができる開発環境を構築できたらと思っています。

ツールについて自分で構築するか、既に良いツールがないか色々と探していたのですが、「text-scripting-vba」というツールが便利そうなので試してみました。詳細についてはText Scripting on VBAに記載されています。

 

 

まずはじめに、Excelのオプションをからセキュリティセンターの設定を選択してVBAのアクセスを信頼するにチェックします。

 

次に、「text-scripting-vba」からツールをダウンロードして任意のディレクトリに展開します。

 

展開が終わったら、Excelファイルを新規作成します。そしてVBEを開き、「ThisWorkbook」に「ThisWorkbook.cls」のコードをコピーします。

 

コピーが終わったら、Excelファイルをxlsm形式で保存して閉じます。今回はsample.xlsmとしました。

 

sample.xlsmをもう一度開いて、入っているサンプルのマクロ「dispOS」を確認できると、外部ファイルの自動読み込みが成功しています。マクロを実行してみます。

 

マクロを実行すると、OS情報が表示されます。

 

ツールが動いているのを確認できたので、次に外部ファイルを更新してExcelに反映してみます。エディタは、Visual Studio Codeを利用してみます。コメントに「だよ!!」を足して上書き保存してみます。

 

次に、外部ファイルの更新をExcelに反映するために、マクロ「ThisWorkbook.reloadModule」を実行します。

 

実行したら次に、マクロ「dispOS」をもう一度実行します。外部ファイルに追加したコメントが反映されているのを確認できました。

 

実際のコードも確認してみます。Excel内のモジュールのコードも更新されていることを確認できました。

 

読み込む外部ファイルは、「libdef.txt」でパスを設定します。

 

今までVBAはExcel等のソフト内のエディタ(VBE)で開発していくスタイルでしたが、モジュールを外部ファイルで管理することでGitHubでのバージョン管理や差分抽出など汎用性が高くなります。新しい開発環境にしたことで開発しやすくなりそうです。

 
 

 

Try #007 – QGISプラグインを本リポジトリに登録公開してみた

 

 

今回は、QGISプラグインを本リポジトリに登録申請して公開してみようと思います。

 

まずは、自作したプラグインを準備します。今回は下の2つの自作プラグインを登録してみようと思います。

JapanElevation

AttributeAssignment

 

次に、QGISプラグインを本リポジトリに登録するためにはOSGeoのユーザー登録が必要になります。

 

メールで問い合わせをします。メールの返信がきてユーザ登録を完了します。

 

ユーザー登録が完了後、ログインします。

 

ログイン後、PLUGINSページに移動して「Upload a plugin」ボタンをクリックします。

 

最後に、自作プラグインの圧縮したデータをアップロードします。

 

あとはプラグインが審査されて結果メールを受信します。今回、JapanElevationについてはそのまま登録されたのですが、AttributeAssignmentについては「似たようなプラグインが他にもあるから確認してほしい」と返信がきました。

いくつかプラグインを調べるとattributepainterというプラグインが似ていて既に登録されていました。私が作成したプラグインより多機能だったため、不足していた表示をリアルタイムに更新する機能を開発者に連絡して採用して頂きAttributeAssignmentについては本リポジトリ登録は辞退しました。

QGISで属性付与機能を利用したい場合は、attributepainterをぜひご利用ください。もちろん、AttributeAssignmentも利用可能です。

 

結局、JapanElevationのみ公開することができました。

 

QGISの本リポジトリ登録申請は、プラグインさえ開発してしまえば比較的簡単に可能でした。ただ、既にプラグインがたくさんあるので構築する前に既に似たようなのがないか確認する必要がありそうですね。。。

 
 

 

Python #005 – ディレクトリをファイルごと全て削除

 

Pythonでディレクトリをファイルごと全て削除したい時は下記のように記述します。

 

sample.py

 

今回は、事前にsampleディレクトリを準備しました。

 

下記コマンドを実行すると、sampleディレクトリがファイルごと全て削除されます。

 

ディレクトリの有無:

 

ディレクトリをファイルごと全て削除:

 

shutilを利用するとディレクトリをファイルごと全て削除することができます。

 
 

  • 参考文献

shutil

 

webpack #004 – gulpとBrowsersyncと連携

 

node.js_016_02

node.js_023_01

 

今回は、webpackgulpBrowsersyncを連携した環境を構築してみます。

 

まず、gulpでwebpackを読み込むために、「webpack-stream」をインストールします。
その他にもお好みで、「Node.js #023 – gulpとBrowsersyncでブラウザ同期」や必要なモジュールをインストールしておきます。

 

今回は、下記のようなディレクトリ構造にします。

 

それぞれのコードを記述します。

 

webpack.config.js

 

gulpfile.js

 

package.json

 

main.js

 

index.html

 

stylesheet.css

 

sample01.js

 

sample02.js

 

gulpを実行します。編集後保存すると、圧縮されたHTML・CSSとコンパイルされたJSがそれぞれ生成されます。

 

gulpfile.js
gulpでwebpackを読み込む:

 

gulpfile.js
gulpでコンパイル処理:

 

webpackとgulpとBrowsersyncを利用した開発環境を構築してみました。

 
 

 

Leaflet #038 – レイヤの画面連動

 

Leafletでレイヤの画面連動を実装するには、「Leaflet.Sync」と言うプラグインを利用すると便利です。
※Leafletのバージョンは1.0.0以上を利用する必要があります。

 

index.html

 

stylesheet.css

 

script.js

 

index.htmlを実行すると下記のようにブラウザで表示されます。

example

 

Map分のdivタグを作成:

 

Mapのレイアウトを作成:

 

Mapをそれぞれ宣言:

 

Mapを連動:
カーソルON:

 
 

レイヤの画面連動を実装したい時に便利なプラグインです。2画面以上の連動も可能です。

 
 

 

Riot.js #011 – webpackでビルド

 

riot-js_001_01

 

今回は、Riot.jswebpackでビルドしてみます。

 

まず、riot関係の必要なモジュールをインストールします。

 

今回は、下記のようなディレクトリ構造にします。

 

それぞれのコードを準備します。

 

webpack.config.js

 

index.html

 

sample.tag

 

sample2.tag

 

main.js

 

ビルドすると、コンパイルされたapp.jsが生成されます。

 

index.htmlを実行すると下記のようにブラウザで表示されます。

 

main.js
各タグを読み込み:

 

webpack.config.js
タグを読み込むローダー:

 

webpack.config.js
Riot.jsを認識:

 

webpack.config.js
出力するJSを圧縮:

 

tagファイルをwebpackでビルドすると、app.jsのみを読み込むことによりコンテンツの表示が可能です。

 
 

 

webpack #003 – コードの圧縮

 

 

今回は、webpackでコードを圧縮してみます。

 

まず、「webpack.config.js」を書き換えます。

webpack.config.js

 

ファイルの準備ができたらビルドします。

 

ちなみに一度グローバルでインストールしておくと「webpack」コマンドだけでビルド可能です。

 

 

ビルドが成功すると、buildディレクトリに全てのコードが圧縮されたapp.jsが作成されます。

app.js

 

app.jsを読み込むindex.htmlを作成して実行してみます。前回と同じ内容を確認できます。

index.html

 

 

webpackでコードを圧縮してビルドすることも可能です。利用する時はどこでgulpとの使い分けをするか考える必要がありそうです。

 
 

 

Leaflet #037 – レイヤの分割表示

 

Leafletでレイヤの分割表示を実装するには、「leaflet-side-by-side」と言うプラグインを利用すると便利です。

 

index.html

 

stylesheet.css

 

script.js

 

index.htmlを実行すると下記のようにブラウザで表示されます。

example

 

分割設定:

 
 

レイヤの分割表示を実装したい時に便利なプラグインです。

 
 

 

webpack #002 – CSSの読み込み

 

 

今回は、webpackでCSSを読み込みます。

 

まず、CSSのサンプルを用意しておきます。

 

次に、CSSの読み込みに必要なローダーをインストールします。

 

インストールが完了したら、「webpack.config.js」と「main.js」を書き換えます。

webpack.config.js

 

main.js

 

ファイルの準備ができたらビルドします。

 

ビルドが成功すると、buildディレクトリに全てのJSとCSSが統合されたapp.jsが作成されます。

app.js

 

app.jsを読み込むindex.htmlを作成して実行してみます。stylesheet.cssの内容が実行されているのを確認できます。

index.html

 

 

webpackでCSSも読み込んでビルドすることが可能です。

 
 

 

Python #004 – コマンド引数設定

 

Pythonでコマンド引数を実装したい時はdocoptを利用すると便利です。

 

docoptはpipでインストールすることができます。

 

sample.py

 

下記コマンドを実行でヘルプを確認。

 

下記コマンドを実行でバージョンを確認。

 

下記コマンドを実行でsample01の引数を確認。

 

下記コマンドを実行でsample02の引数を確認。

 

不正なコマンドを実行すると、正しいコマンドの説明が表示されます。

 

引数を定義:

 

全ての引数を格納:

 

各引数を格納:

 

docoptを利用するとコマンド引数を実装できます。

 
 

  • 参考文献

docopt

 

Python #003 – プログレスバー

 

Pythonでプログレスバーを実装したい時はtqdmを利用すると便利です。

 

tqdmはpipでインストールすることができます。

 

インストールできているか確認してみます。

 

sample.py

 

下記コマンドを実行すると、プログレスバーで処理経過が表示されます。

 

ループにtqdmを記述する:

 

tqdmを利用すると手軽にプログレスバーが実装できます。

 
 

  • 参考文献

tqdm

 

webpack #001 – インストール&ビルド

 

 

webpackは、複数のJSファイルを1つにまとめるビルドツールです。CSS等もJSに含めてビルドすることもできるようです。利用するときは、webpack単体で利用するかgulp等と組み合わせるかの判断が必要そうですね。

今回は、webpackをインストールしてビルドするところまでを試したいと思います。

 

まず、Node.jsでwebpackをインストールします。今回は最新版のwebpack3をインストールしてみます。

 

 

インストールが完了したら、package.jsonのscriptsの項目を書き換えます。

 

次に、ビルドをしてみたいと思います。今回は複数のJSファイルを統合します。

まず下記のような構造で実行ファイルを作成します。

 

sample01.js

 

sample02.js

 

main.js

 

webpack.config.js

 

ファイルの準備ができたらビルドします。

 

ビルドが成功すると、buildディレクトリに全てのJSが統合されたapp.jsが作成されます。

app.js

 

app.jsを読み込むindex.htmlを作成して実行してみます。sample01.jsとsample02.jsの内容が実行されているのを確認できます。

index.html

 

 

現在はgulpを利用しているのですが、環境によってはそろそろ(いまさら?)webpackも必要になってきているので導入していこうと思います。今回はwebpackをインストールしてビルドするところまで確認しました。

 
 

 

Try #006 – Azure FunctionsやGoogle Apps ScriptでSlack Statusを操作してみた

 

 

 

今回は、Azure FunctionsGoogle Apps Scriptを利用してSlack Statusを操作してみようと思います。

 

まずは、Slackでトークンを取得する必要があります。今回はテスト用としてLegacy tokensを取得します。

 

トークンが取得できたら次に、Azure Functionsで定期的にSlack Statusを実行してみます。
Azure Functionsの操作方法は「Try #005 – Node.jsとAzure FunctionsでSlack botを作ってみた」を参考にしてみてください。

開発 → コードに下記のようなスクリプトを記述します。

index.js