Code for final

ふぁいなる向けのコード置き場です。すでにコードじゃないこともいっぱい。

UiPathでzipファイルを解凍する。

最近、RPAについて勉強しています。
UiPathを使ってzip解凍をしたくなって、試していたのですが、ちょっとだけはまったので記録しときます。

UiPathには便利なアクティビティ(部品)がたくさんありますが、圧縮ファイルを解凍するアクティビティはまだないみたいです。
アンオフィシャルなものならあるかもですが。

なので7-zipを使って解凍することにします。

www.7-zip.org

7-zipをインストールしてある前提とします。

プロセスを開始アクティビティを配置して、以下のように設定します。

f:id:finalstream:20190920105719p:plain

プロパティ
ファイル名   "C:\Program Files\7-Zip\7z.exe"
引数 "x -y -o""" + rootPath + """ -p" + zipPassword + " """ + item.ToString() + """"

rootPathは解凍先、zipPasswordはzipファイルのパスワード、itemは解凍するzipファイルの変数です。

ポイントとしては以下の3つですかね。

  • "(ダブルクォーテーション)はエスケープ("で囲む)が必要
  • オプションとオプション値の間にスペースは入れない
  • 引数全体を"で囲む

Windows 10のWindows Updateでエラーになるときは設定の「更新とセキュリティ」の中にある「トラブルシューティング」の「Windows Update」が有効です。

仕事とかでWindows10を使っていると、ときたまWindows Updateが失敗するマシンに遭遇します。

そのときはエラーコードで検索してネットに書いてある方法をいろいろと試すと思いますが、 Windows Updateに限っては特効薬があると思っています。

それはトラブルシューティングです。

ぼくはこれまで数々のトラブルでWindowsトラブルシューティングにすがってきましたが、 解決されたことは一度もありませんでした。
なのでトラブルシューティングはただの飾り程度に思っていましたが、 Windows Updateについては別です。

いままで何回か使ってきましたが、かなりの確率で修復されます。

設定の更新とセキュリティの中にトラブルシューティングがあり、その中のWindows Updateから実行します。

f:id:finalstream:20190906180625p:plain

トラブルシューティングの一番上にあるということはWindows Updateがトラブりやすい仕様なんでしょうね。

あくまでぼくの経験に基づくものなので治らなくてもクレームしないでくださいね。

SQL ServerでOracleみたいに@ファイル名でSQLを実行する方法。

SQL Serverで前々からOracleみたいに@sqlファイル名でSQLファイルを実行できないかと思っておりました。
以前簡単に調べたときは見つけられなかったのですが、今回またほしい機会があって調べたらありました!

以下のとおりにやればできました。同じようにお困りの方はお試しあれ。

1.SQLServer Management Studioで新しいクエリを開く

2.クエリメニューのSQLCMDモードを選択

3.クエリとして以下のように記述。:rをつけてスペースあけてファイル名を書く

:r c:\work\xxxx.sql
:r c:\work\xxxx2.sql
:r c:\work\xxxx3.sql

4.実行

Vue.jsを使った商用にも耐えれるフロントエンド開発環境を無償で手軽に整える手順。

最近、フロントエンドの共通処理方式を検討してくれと依頼されたため、前から気になっていたVue.jsを使ってみたかったこともあり、 思い切って提案したら普通に通りました。なので毎日Vue.js三昧です。楽しいです。
ただ、商用なシステムなので失敗は許されないので、いろいろと不安はありますが、いまのところうまく行ってます。

Vue.jsは単体で使用するとただのjsファイルなので、cdnとかで普通のhtmlに読み込めると使えるわけですが、 商用となるとフォルダ構成、ビルド環境、テスト環境とかどうしようか迷うわけです。
そしてチームで開発するため、その手順や運用が簡単じゃないとうまくいきません。
eclipseのテンプレートプロジェクトみたいなものがあればいいのに…と探すとありました!

ここではVue.jsを使った手軽な商用でも使える開発環境を構築する手順を記載します。
スペックにもよりますが、およそ30minくらいで構築が可能だと思います。 また、インストールなどの細かい手順はここでは記載していないのでググってください。

※今回の開発環境は期間が短く、また若手(スキルが低い)メンバーで開発をする必要があったもあって、 Nuxt.jsやVuexといった学習コストが高そうなものは採用しておりませんのでご了承ください。
その弊害でイベントの伝播で多少バケツリレーにはなりましたが、許容範囲だったと思います。

必要なソフトをいれる

必要となるソフトはまずはVisual Studio Code(VSCode)とNode.jsです。
以下からダウンロードしてそれぞれインストールします。

azure.microsoft.com

nodejs.org

Visual Studio Code拡張機能をいれる

VSCode拡張機能をアドオンして使うものなので、最低限必要と思うものだけ記載します。

marketplace.visualstudio.com

日本語で使いたいひとは必須です。

marketplace.visualstudio.com

Vue.jsをVSCodeで使うときは必須です。vueファイルに対応してくれます。

marketplace.visualstudio.com

デバッグするのに必須です。for Firefoxもあります。

marketplace.visualstudio.com

リアルタイムにコードの静的解析をしてくれるのであったほうが便利です。

marketplace.visualstudio.com

コードを整形してくれます。チームで開発するときはフォーマットがバラバラになるのであったほうが便利です。

上記は必須と思うものですが、ほかにも便利な拡張はあるかもなので必要に応じていれる。

VSCodeを起動してVue CLIをインストールして起動する

きど次にターミナルを開きます。ターミナルメニューから新しいターミナルを選択します。
ここで以下のコマンドを入力します。

npm install -g @vue/cli

次にVue UIを起動するため、以下のコマンドをたたきます。

vue ui

するとブラウザが起動し、Vue UIが起動します。
Vue.jsはie11でも動きますが、Vue UIはie11だと動かないので注意ください。

vueプロジェクトを作成する

Vue プロジェクトマネージャから作成を選択する。
任意の場所(c:\developなど)を決めて、ここに新しいプロくジェクトを作成するをクリック。
ここではプロジェクト名を「xxx」として作成することにするのでプロジェクトフォルダはxxxと入力します。

次のプリセットの選択は手動を選択します。

次の機能の有効化は以下のものを有効化します。
TypeScriptの有効化は強く推奨します。TypeScriptを使うことでコードをケアレスミスを防げますし、何よりシンプルに書けます。
最後に書いてますが、TypeScriptからJavaScriptへのコンパイルはビルド時に勝手に行われるため気にしなくてもいいです。
私が行った今回のプロジェクトではVuexは学習コストが高くなるため、見送ったので選択していませんが必要に応じて有効化してください。

  • Babel
  • TypeScript
  • Router
  • Linter / Formatter
  • Unit Testing
  • E2E Testing

次の画面でselectのところを以下のように選択します。 Cypressは企業のプロキシで弾かれる場合がありますので、その場合はNightwatchを選択してください。

Pick a linter : ESLint + Prettier

Pick a unit testing solution : Jest

Pick a E2E testing solution : Cypress or Nightwatch

すべて選択したらプロジェクトを作成するをクリック。 必要なファイルをダウンロードするのでそれなりに時間がかかります。
VSCodeのターミナルを見れば動いているので進捗がわかります。
終わったら以下のような画面が表示されます。

f:id:finalstream:20190428142904p:plain

サーバを起動する

上記の画面で、左側のメニューの一番下のタスクを選択します。
表示された一覧の一番上にある「serve」を選択し、タスクの実行をクリック。 するとビルドが始まります。下のところに緑のチェックマークが出るまで待ちます。

f:id:finalstream:20190428143926p:plain

アプリを開くをたたけばブラウザが起動し、サンプル画面が表示されます。

f:id:finalstream:20190428153513p:plain

ソースコードを確認する

VSCodeでプロジェクトフォルダ(xxxの場所)を開くとソースが種類ごとにフォルダに分かれて配置されています。 商用だとプロジェクトの構成は重要になると思いますので、このようにサンプルファイルが予め入っていてそれを 参考に配置すればいい感じになるのはとても便利です。

srcの下にcomponentsとviewsがあります。 componentsには共通部品を、viewsには画面のソースをいれます。
画面ごとにフォルダをきってもいいと思います。

f:id:finalstream:20190428160154p:plain

最後に

Vue.js(Vue CLI)のいいところは、簡単にオールインワンで最新の開発環境を構築できるというところだと思います。
TypeScriptといえばjsにコンパイルする環境を構築するのを勉強しなくてはいけないと思っていて 躊躇していた人もVue CLIでビルドをすれば勝手にjsに変換したものをビルドしてくれるし、 VSCode修正したtsファイルも何もせずにリアルタイムにブラウザに反映される。
さらに何もしなくてもデフォルトで今流行りのWebpackでビルドされるので、依存関係を気にせず開発でき、通信量削減にも繋がります。

これでひとまず開発環境は整いました。
あとは開発する上で気をつけることやハマったところを記事にしていきたいと思います。

Windowsのネットワークと共有センターのトラブルシューティングでも復帰しない場合に、ネットワークを初期化するコマンドを実行したら直った話。

先日、会社で使用していたPCが突然、ネットワークに繋がらなくなりました。
前日まで使えてたので設定が悪いわけでもありません。
そして周りの席のメンバーは普通に使えているのでネットワーク障害でもないです。

ネットワークトラブルのときよくやるのが、ネットワークと共有センターのトラブルシューティングですが、 それでも問題を特定できないと言われる。
顧客から借りているPCなので使えないと仕事にならないし、交換を依頼してもすぐもらえるかわからないし、 何よりレビューをする必要があるものがたまっている。
詰んだ。。

とりあえず状況を確認した。

設定を確認した

設定が飛んだ可能性を疑って、ipconfigをたたいたらipアドレスdnsが表示されたので設定は問題なかった。

ケーブルを交換した

隣のメンバーのケーブルを借りてやってみるもつながらず。

IPアドレスを交換した

さらに隣のメンバーのIPを借りてやってみるもつながらず。

バイスマネージャからネットワークドライバを削除して再インストールした

設定が消えて再設定するはめになったが、つながらず。

隣のメンバーの端末にpingを飛ばした

宛先ホストに到達できませんというエラーで到達できず。

デフォルトゲートウェイpingを飛ばした

宛先ホストに到達できませんというエラーで到達できず。

ここでデフォルトゲートウェイpingを飛ばした結果を見て気づきました。
pingコマンドの最後に表示される損失が正常なら0%ですが、25%だったり、50%だったり 実行するたびに変わってました。
こんな現象ははじめてでした。

藁をもすがる想いで事象に関連しそうなものをググったがピンポイントな 解決方法は見つからず。 海外のページにネットワークの初期化コマンドを実行すればよいと書いてあるようなところがあったので コマンドをひたすら実行してみた。
するとつながった。

最終的に成功したのは以下の手順です。

1. ネットワークを初期する以下のコマンドを2つ連続して実行する。

>netsh interface ip reset c:\reset.log
>netsh winsock reset

どちらも今まで使ったことが無いコマンドですが、ネットワークの設定をリセットしてくれるみたいです。
片方のコマンドだけではだめだったので注意。

2.再起動してipアドレスを設定し直す。

再起動後、ipアドレスの設定が消えている(dnsは残ってました)ので再設定するとなんと繋がりました。

というわけで、原因は全く不明ですが、ネットワークの復旧ができました!

デフォルトゲートウェイpingを飛ばしたとき、謎の損失が確認できるときは ひょっとしたらこの手順で解消できるかもです。 お試しください。

Chromeを更新したら新しいタブのよく使うサイトのサムネイルが表示されなくなったのを復活する方法。

先日、Chromeが自動更新されてUIが変わりました。
それは別によかったんですが、新しいタブのよく使うサイトがアイコン表示に変わってしまいました。
最初はあんまり関係ないかと思って使っていたのですが、意外とサムネイルがないと不便ということが。。
無意識的にたぶん文字を読まずに視覚的に判断してたんですね。

で、復活させる方法がないか、海外のサイトを探しまくったところありました。
以下の4つの操作を行うことで復活可能なので困っている方はお試しください。

アドレスバーに「chrome://flags」をいれてEnterキー

設定画面に飛びます。

検索ボックスに「Enable using the Google local NTP」を入れてEnabledに変更

なぜNTPが?とおもったらNew Tab Pageのことっぽいですね。
Default→Enabledにします。

f:id:finalstream:20180922094715p:plain

検索ボックスに「New Tab Page Material Design Icons」を入れてDisabledに変更

こっちだけでいけると思ったけどNTPのほうも変更する必要があります。
Default→Disabledにします。

f:id:finalstream:20180922094839p:plain

Chromeを再起動

特に設定を保存するボタンとかはないのでそのまま再起動で問題ないです。
右下に現れる「RELAUNCH NOW」ボタンをクリックで再起動されます。

これで復活したと思います。

Windows10上のVM(CentOS)にDockerをいれてどんなものか体感する手順。

Dockerについて前々から気になっていたのでWindows10にDockerをいれてどんなものなのか体感するまでの 手順を書きたいと思います。Window10でやってますが、別にVirtualBoxが入ればWindows10でなくても問題ないです。
はじめに書いておきますが、わりと簡単に体感できます。
Linuxとかに慣れているひとであれば1hourくらいで体感できるのではないでしょうか。

まず、基本的にDockerはLinux上で動作するものということなのでLinuxVMにいれます。
Windows版もあるみたいですがHyper-Vとか必要っぽいので。

Dockerとは?

Dockerに興味があるひとがこの記事にたどり着いていると思うので説明不要だと思いますが、簡単に言えば仮想サーバ構築ツールです。
VMと異なるのはサーバごとにOSのインストールは不要で、1つのサーバ上に複数のサーバの構築ができます。
構築したサーバはイメージ化して配布できるので誰がやっても同じ環境が構築できます。
また、各種サーバアプリのイメージが公開されており、コマンド1つで構築可能です。
僕はインフラ周りはあまりやらないのですが、テスト環境構築とかで使えるのではないでしょうか。

www.docker.com

Oracle VirtualBoxをインストール

VMはなんでもいいんですが、使い慣れているVirtualBoxをインストールします。
特に何も注意すべきところはないのでインストーラを次へ次へでOKです。

Oracle VM VirtualBox

CentOSをダウンロード

Linuxもなんでもいいんですが、RedHat系で人気のあるCentOS 7をダウンロードします。
以下のサイトからMininal ISOをダウンロードしてください。

Download CentOS

仮想マシンを作成

VirtualBoxを起動して、新規を選択し、名前にCentOSと入れるとOSが選択されます。
あとはそのまま次へ次へで仮想マシンを作成します。

作成した仮想マシンの設定でネットワークを"NAT"から"ブリッジアダプター"に変更します。
NATでもできなくないですが、ポートフォワードを設定するのがめんどいので。

f:id:finalstream:20180917004323p:plain

ブリッジにし忘れると以下のように運が悪いとドハマリします。

final.hateblo.jp

仮想マシンを起動してCentOSをインストール

起動したらダウンロードしたISOを指定して、Install CentOS 7を選択します。 あとはGUIなので次へ次へですが、ネットワークはONにしといたほうがよいかもです。
インストール中にrootのパスワードを設定します。
環境にもよりますが、インストールは10minくらいで終わると思います。
再起動してログインできればOKです。
ログインしたら以下のコマンドをたたいてipアドレスを確認します。 以下の例でいうと2:のinetの右横のがipアドレス(10.154.54.86)です。

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:48:1e:42 brd ff:ff:ff:ff:ff:ff
    inet 10.154.54.86/24 brd 10.154.54.255 scope global noprefixroute dynamic enp0s3
       valid_lft 5420sec preferred_lft 5420sec
    inet6 fe80::b4fc:2848:14de:b0ca/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

RLoginをダウンロード

VirtualBoxだとカーソルが持ってかれて使いにくいのでWindowsからCentOSを操作できるように ターミナルソフトをいれます。なんでもいいですが、インストール不要で使いやすいRLoginを使います。
以下のサイトからダウンロードして任意の場所に解凍します。

rlogin/telnet/ssh(クライアント)ターミナルソフト

RLoginでCentOSに接続

RLogin.exeを起動します。
新規接続でsshを選択して、さきほど確認したipアドレスをいれます。 あとはユーザをroot、パスワードを決めたやつをいれてOKします。
初回接続の際にいろいろ聞かれますが、はいでOK。

Dockerをインストール

いよいよDockerです。RLoginの画面で以下のコマンドを流すだけでインストールされます。

[root@localhost ~]# yum install -y  docker

Dockerを起動

起動は以下のコマンドを実行するだけです。

[root@localhost ~]# systemctl start docker

起動しているか確認。active(running)になっていればOK。

[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 月 2018-09-17 01:48:28 JST; 7s ago
     Docs: http://docs.docker.com
 Main PID: 10950 (dockerd-current)
   CGroup: /system.slice/docker.service
           ├─10950 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-pat...
           └─10954 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/...

 917 01:48:26 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:26.886529003+09:00" level=info msg="libcontainerd: new containerd process, pid: 10954"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.049257313+09:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.050844195+09:00" level=info msg="Loading containers: start."
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.070560827+09:00" level=info msg="Firewalld running: true"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.282047259+09:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0....IP address"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.479554825+09:00" level=info msg="Loading containers: done."
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.523279502+09:00" level=info msg="Daemon has completed initialization"
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.523307835+09:00" level=info msg="Docker daemon" commit="6e3bb8e/1.13.1" graphdriver=overlay2 version=1.13.1
 917 01:48:28 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
 917 01:48:28 localhost.localdomain dockerd-current[10950]: time="2018-09-17T01:48:28.538125695+09:00" level=info msg="API listen on /var/run/docker.sock"
Hint: Some lines were ellipsized, use -l to show in full.

DockerでWEBサーバを構築

上記までの手順ではDockerのエンジンだけインストールされているのでこっから本領発揮のとこです。
apache webサーバを構築してみます。 Dockerは各種アプリのイメージが公式的に公開されており、そのイメージをダウンロードしてローカルサーバで動かす仕組みとなってます。
どんなイメージがあるかは以下のサイトで確認できると思いますが、RedminePostgreSQL、Jenkinsなどわりとなんでもあります。

https://hub.docker.com/explore/

なので以下のコマンドを流すだけで、構築ができてしまいます。

[root@localhost ~]# docker run -d -p 80:80 --name httpd httpd

起動したかは以下のコマンドで、httpdがいればOKです。

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
3fc96caa505a        httpd               "httpd-foreground"   6 minutes ago       Up 6 minutes        0.0.0.0:80->80/tcp   httpd

WEBサーバの起動を確認

Windowsからブラウザを起動して、ipアドレスをアドレスバーにいれてたたくと さみしいapacheのサンプル画面がでれば起動しているということです。

f:id:finalstream:20180917020828p:plain

DockerをGUIで操作

dockerですが、CUIで操作するのは結構たいへんです。
GUIで操作するツールも用意されています。

これもDockerでいれちゃいます。

[root@localhost ~]# docker run -d -p 8080:8080 --name rancher-server rancher/server

途中でファイアウォールが有効になっているうまくうごかないところがあるので切っておきます。

[root@localhost ~]# systemctl stop firewalld

起動後、Windowsの画面のブラウザからipアドレス:8080でアクセスすると以下の画面が表示されればOKです。
スペックによりますが、起動は1~2minくらいかかります。

f:id:finalstream:20180917024544p:plain

デフォルトは英語ですが、右下のところで日本語に変更できます。
まず管理者メニューのアクセスコントロールでLOCALを選択し、管理者を登録します。

その次にインフラストラクチャでホストを選択します。
ホストを追加して保存します。

以下のコマンドをコピー&ペーストし実行しホストを登録します Rancher:と書いてあるのでコマンドをターミナルで流します。
こうすることでサーバとの紐づけ自動で行ってくれます。

# 内容は環境によって異なります。以下は私の環境での例です。
sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://10.154.54.86:8080/v1/scripts/06051ED6561D2F86C07A:1514678400000:UCPy9qbQ1dQ2KCue0CLu076A

あとはホストの画面で見れば、Dockerで動いているもの(コンテナ)が確認できます。

最後に

まだまだ奥が深いDockerですが、ここまでなんとなくDockerについて手軽な感じが伝わったかと思います。
僕もまだまだ勉強中ですが、素敵なDockerライフを。