著者アーカイブ takahashi

takahashi 著者:takahashi

macOS Mojaveでとにかく簡単に多段SSHしたい! -SSH Tunnel Manager編-

前回の記事でmacOSでも簡単にSSHTunnelをできるようにしたいと探した結果、Coccinellaというアプリを発見し、試しては見たものの残念ながらmacOS Mojaveではうまく動かなかった…という話をご紹介しました。

今回は、いろいろ探していて見つけたもう一つのSSHTunnelアプリ”SSH Tunnel Manager“を試してみたいと思います。

起動するとこんな画面が出てきます。

まず、設定画面左下の+ボタンを押して、新しい項目を追加します。

nameには何のサーバーかわかりやすいような名前、Loginは踏み台サーバー側のユーザーid、Hostはホスト名、Pirtにはポート番号をそれぞれ指定します。

今回はlocalhost経由で目的のサーバーにつなげる設定(例えば127.0.0.1:1222につないだら踏み台サーバー内のネットワークの192.168.0.110:22に転送する)にしたいので、画像のように設定値を入れていきます。

少しわかりづらいですが、左側のportがlocalhostにマッピングするポート番号、IPと右側のportには接続先サーバーの情報を入力します。

また、Optionsボタンを押すと詳細な設定を行うことができます。

この辺りは使用しているサーバーの設定やお好みに合わせて設定してください。
ちなみにsocks4によるプロキシも利用できるようです。

設定が完了すると、こちらのウインドウに接続先サーバーが追加されます。

項目の右側にある”Start”をクリックすると、接続処理が開始されます。

Coccinella同様に通知領域に追加することも可能で、その場合は通知領域にあるアイコンをクリックして表示されるコンテキストメニューから接続することも可能です。

なお、秘密鍵を使った接続の場合は、あらかじめ.bashrcなどに”ssh-add”コマンドを記述して秘密鍵を事前にインポートするように設定しておく必要がありそうです。

それでは早速接続してみます。

とりあえず、接続はうまく行った模様。
後はほかのアプリケーションから接続できるかですが…

おおおバッチリ繋がりました…!!!
特に接続が切れたりすることもなく、安定した接続を行うことができました。

今後家のサーバーにアクセスするとき、これでmacOSからも踏み台サーバーを意識することなく使うことができそうですε-(´∀`*)ホッ

macOSからの多段接続にお困りの方はぜひ試してみてください。

takahashi 著者:takahashi

macOS Mojaveでとにかく簡単に多段SSHしたい! -Coccinellida編-

以前、Windowsでは簡単に多段接続したファイルのやり取りができるソフト”WinSCP”をご紹介しましたが、自分はmacOS(Mojave)も使っているので同じことを実現したいなーと思っていました。

しかし、macOSはWindowsと打って変わって、多段接続に対応したアプリがなかなか見つかりません。

もっともmac自体にはもともとOpenSSHクライアントがインストールされているので

ssh -v -N  -L ローカルホストのip1:ローカルホストのポート1:接続先ホストのip1:接続先ホストのポート1 [-L ローカルホストのip2:ローカルホストのポート2:接続先ホストのip2:接続先ホストのポート2 -L ローカルホストのip3:ローカルホストのポート3:接続先ホストのip3:接続先ホストのポート3 -L ...] -o ConnectTimeout=15 -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o TCPKeepAlive=yes [-i 公開鍵認証の場合は秘密鍵のパス ] -p 踏み台サーバーのsshポート 踏み台サーバーのホスト
#※[]部分は必要な時のみ入力

のようにすれば繋がるのですが、毎回こんなコマンドを打つのはめんどくさい…

とりあえず上のコマンドをシェルスクリプトにし、パスの通っているディレクトリに置いたので、コマンド一発で繋げられるようにはなりましたが、Windowsでの利便性と比較すると、ターミナルを開いてコマンドを打つのですら正直めんどくさく感じます。
どうせならVPN見たくGUIからワンクリックでサクッとつながってほしい…と思い、いろいろ探した所、よさげなアプリを発見しました。

Coccinellida

その名も英語で”てんとう虫”を意味する”Coccinellida”

起動するとタスクバーに常駐するので、右クリックからPreferenceをクリックして設定画面を表示。

Tunnelsタブを開くと接続先サーバー設定が表示されるのでaddをクリック

Generalタブには踏み台サーバーの接続情報を入力し、

Port Fowardingタブで踏み台サーバーの先の目的のサーバーへの接続情報(IP・ポート)と紐づけるローカルホストのIPとポートを入力していきます。

設定完了後、設定画面を閉じ、再度通知アイコンを右クリックすると、先ほど追加した接続情報が追加されているので、クリックすれば自動でSSHポートフォワーディングが開始されます。

通知にestablishedと出てきたので、これで繋げられる…!
…と思ったのですが、試しにTerminalから踏み台先のサーバーへつなげようとしても、”ポートが開いていない”という旨のエラーが出て、接続できません。

他のアプリでも接続を試してみましたが、目的のサーバーに接続することはできませんでした。

調べてみるとCoccinellidaは2015/11/25以降アップデートされておらず、Sierra以降はCoccinellidaを使ってSSHTunnelすることはできなくなってしまったようです。

macOS10.12 Sierra でトンネル接続 – Digital Boo

その代わり上記の記事でCoccinellidaとは別のSSHTunnelソフトSSH Tunnel Managerを見つけました。

次回はこのSSH Tunnel Managerで接続できるか試してみたいと思います。

takahashi 著者:takahashi

Laravel環境をインポートしたときに”artisan package:discover handling the post-autoload-dump event returned with error code 1″エラーが出た時に確認したいこと

いろいろあって、開発中のLaravel環境をgit経由で再インポートしたのですが、再度npm installしてからcomposer installしたところ、こんなエラーが発生しました。

Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1

エラーで調べるとこんな記事が。

[Laravel] プロダクション環境にはLaravel Duskをインストールしない – 端くれプログラマの備忘録

Laravel Duskはブラウザでの自動テストAPIを提供するプラグインで、製品版(production)モードではセキュリティ上の理由で無効化しなければいけないため、productionモードで有効化されているとエラーになります。

記事の通りにcomposer.jsonを確認すると

...
"require": {
        "php": "^7.1.3",
        "ext-json": "*",
        "fideloper/proxy": "^4.0",
        "intervention/image": "^2.4",
        "lampager/lampager-laravel": "^0.3.0",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "^1.0",
        "league/flysystem-aws-s3-v3": "^1.0",
        "maatwebsite/excel": "^3.1",
        "simplesoftwareio/simple-qrcode": "^2.0"
    },
    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.0",
        "filp/whoops": "^2.0",
        "friendsofphp/php-cs-fixer": "^2.13",
        "fzaninotto/faker": "^1.4",
        "laravel/dusk": "^4.0",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.0",
        "squizlabs/php_codesniffer": "^3.3"
    },
...

あれ、含まれてない(汗

ちゃんとrequire-devにしか”laravel/dusk”の項目は入っていません。
もしやと思ってcomposer.lockの方を確認すると…

...
"name": "laravel/dusk",
            "version": "v4.0.2",
            "source": {
                "type": "git",
                "url": "https://github.com/laravel/dusk.git",
                "reference": "9810f8609c8b53d9a3bac7d38c56530e0d77a6bb"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/laravel/dusk/zipball/9810f8609c8b53d9a3bac7d38c56530e0d77a6bb",
                "reference": "9810f8609c8b53d9a3bac7d38c56530e0d77a6bb",
                "shasum": ""
            },
...

含まれていました。
composer installすると
composer.lock
の記述が優先されます。

今回の原因は、composer.lockにその記述が入っていることが原因か…
と思いましたが、ここでふと気づきます。

(まてよ、そもそも開発を始めるときにdevelopモードにしていたはずじゃなかったっけ…)

そもそも今回のエラーはproductionモードにしていなければ出ないはずのエラーなのですが、それにもかかわらず出てしまっているので、よく考えたらおかしな状況です。
そこで調べたところ、.envファイルが入っていないことに気づきました。

前に使っていたLaravelのプロジェクトから.envファイルを書き戻してみると、

composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: intervention/image
Discovered Package: lampager/lampager-laravel
Discovered Package: laravel/dusk
Discovered Package: laravel/tinker
Discovered Package: maatwebsite/excel
Discovered Package: nunomaduro/collision
Discovered Package: simplesoftwareio/simple-qrcode
Package manifest generated successfully.

となり、先ほどのDuskのエラーは出なくなりました。

.envファイル内の
APP_ENV
の設定が
APP_ENV=local
または
APP_ENV=development
になっていないと、自動でproductionモードとして動作してしまい、Duskの部分でエラーになるようです。

つまり開発の際は.envファイルに
APP_ENV=local
または
APP_ENV=development
を記述するのが必須になってきますので、最初にLaravel環境を展開したときは要注意です。

takahashi 著者:takahashi

Softbankの携帯回線大規模通信障害 原因は交換機のソフトウェアアップデート

昨日12/6、13時ごろから、Softbank系列のモバイル回線で、全国的にパケット回線や音声回線に接続できなくなる大規模障害が発生しました。
18時ごろから復旧が始まったとのことだったので、実に4~5時間ほど通信不能になっていたようで、期間的にもかなり長引いた印象でした。

ニュースを見ると、携帯が使えなくなったことで、一時的に公衆電話も復権したようですね。

嘘でしょ!?「公衆電話を初めて使った」という声にネットざわつく – NAVERまとめ

公衆電話の使い方がわからない…なんて話も。
自体の流れを感じます(;´∀`)

さて、今回の通信障害の原因ですが、後にSoftbankが公式に発表をしています。

2018年12月6日に発生した携帯電話サービスの通信障害に関するおわび – Softbank

ソフトバンク、通信障害の原因を公表 エリクソン製交換機ソフトの「期限切れ」- ITMedia

また、エリクソン社自身も同様の発表を行い、謝罪をしています。
Update on software issue impacting certain customers – Ericsson

Softbankは携帯基地局同士をつなぐ”コアネットワーク”に存在し、各携帯端末の通信状態や認証を管理する機器MMEにエリクソン社製の製品を使用しています。

【MME】- NTTPCCommunications用語解説辞典

複数の記事を読んでいくと、どうやらこの機器を動作させるためのソフトウェアにアップデートが行われ、そのアップデートに含まれている”証明書”が古いものであったために有効期限切れとなり、機器の動作障害を引き起こしたようです。
その証拠としてSoftbank以外の海外のキャリアで、エリクソン社製のMMEを利用している業者についてもほぼ同時刻に同様の不具合が発生していたようです。

また、エリクソン社のMMEの機能として、大量の端末を同時に管理できるようにするために、その処理の一部をクラウドサーバーに代わりに行わせることができる機能”vMME”もあるようです。

ソフトバンク、エリクソンのVirtual MMEとクラウドプラットフォームを導入 – Ericsson

今回の”証明書”がなんの証明書を指すのがは詳細に発表されていないのでわかりませんが、恐らく機器のソフトウェアの正当性(本物かどうか)を検証するためのソフトウェア署名の証明書か、vMMEと通信する際に通信先のクラウドサーバーが正しいサーバーかどうかを検証するための証明書あたりではないかなと思います。

いずれの場合であっても有効期限切れになってしまうことでシステムが正常に動かなくなってしまう問題なので、かなりヤバい状況だったのではないかなと思います。
結果的に、ソフトウェアを以前のバージョンにダウングレードしたことで、とりあえず復旧したようです。

今回の根本的な原因はエリクソン社のミスで、たまたまその機器を使用していてとばっちりを受けてしまったSoftbankにとっては大変な災難だったと言えそうです。

takahashi 著者:takahashi

bashシェルスクリプトで引数の取得と空文字を判定する方法

以前村上さんが 【備忘録】MacのFinderで隠しファイル・フォルダを表示する方法 という記事を投稿されてましたが、自分の場合はこちらの内容を参考に簡単に切り替えれるようにシェルスクリプトでon offをできるようにしています。

とりあえず簡単に作ったのでめっちゃ簡素です(;´∀`)

#!/bin/bash

echo 'please type "true" or "false": '
read com

if [ $com = "false" ]; then 
  defaults write com.apple.finder AppleShowAllFiles FALSE
  killall Finder
  echo "隠しファイルが非表示になりました。"
fi

if [ $com = "true" ]; then
  defaults write com.apple.finder AppleShowAllFiles TRUE
  killall Finder
  echo "隠しファイルが表示されました。"
fi

exit 0

シェルスクリプトを作るとき、とりあえず簡単に作っておこうと思って

コマンド実行->隠しファイルの表示、非表示(true or false)を入力

という作りにしたのですが、これだけの操作でわざわざ2段階にする必要ないよなぁ、と思い、

コマンド true
コマンド false

でできるようにしようと思いました。

bashのシェルスクリプトで引数を認識させるのはとても簡単で、

コマンド 引数1 引数2 ... 引数n

とした場合に、引数の値をとる場合は

引数1: $1
引数2: $2

引数n: $n

という変数でそれぞれ取ることができます。
(引数10個目以降の引数の取得については${10}といった書き方をする必要があるようです。)

ただ、折角コマンド内で入力を読み込む処理も書いてあったので、今回は引数が何も入力されなかった時に、従来のtrue or falseを質問するプロンプトを表示するように変えてみました。

ここで”何も入力されなかった”、つまり空文字を判定する必要が出てきます。

PHPなどでは

//もし空だった場合
if($hoge == "")
{ 
    /*処理*/ 
}

みたいに書きますが、bashの場合は

#hogeが空だった場合は処理を実行
if [ -z "$hoge" ]; then
  #処理
fi

と書きます。
ちなみに、”空でなかった場合”に処理をさせたい場合は

#hogeが空でなかった場合は処理を実行
if [ -n "$hoge" ]; then
  #処理
fi

と書けばよいそうです。

これを踏まえてこんな感じに変更してみました。

#!/bin/bash

com=$1 #引数取得

if [ -z "$com" ]; then #もし引数に値が入ってなければ
  echo 'please type "true" or "false": ' 
  read com #再入力を要求
fi

if [ $com = "false" ]; then #"false"が指定されたら
  defaults write com.apple.finder AppleShowAllFiles FALSE #finderで隠しファイルを隠すコマンドを実行
  killall Finder
  echo "隠しファイルが非表示になりました。"
fi

if [ $com = "true" ]; then #"true"が指定されたら
  defaults write com.apple.finder AppleShowAllFiles TRUE #finderで隠しファイルを表示するコマンドを実行
  killall Finder
  echo "隠しファイルが表示されました。"
fi

exit 0

この内容をテキストファイルとしてユーザーがアクセスできる場所(例えば/usr/local/bin/ とか /opt/ とか)に保存し、”chmod +x”などを行って実行権限を与えておきます。
これでお手軽隠しファイル表示/非表示コマンドの完成です。

bashなどのシェルが使える環境では、こういったシェルスクリプト(バッチファイル)を作っておくことで、複数のコマンドを打たないといけないような操作を1コマンドで済ませたりすることができるようになります。

便利なので是非活用してみてください。

takahashi 著者:takahashi

Windows 10のデフォルトブラウザがEdgeからChromeベースの新ブラウザに変更されるという噂

最近Winodws 10のフィードバックHubから
“Google Chromeを友達に勧める可能性はどれぐらいありますか”
というような質問が提示されて、
(あんなにEdgeを推してたのに、急にどうしたんだろう…)
と思ってました。

関係があるかわかりませんが、ネットのニュース記事でこんな話題が流れてきました。

Microsoftが「Chromium」ベースの新ブラウザ「アナハイム」を開発中か – Gigazine

なんとMSは、現行のEdgeの推進をあきらめ、ChromeのベースとなっているChromiumをベースにカスタマイズした新ブラウザをWindows 10の標準ブラウザとして組み込んでしまおうとしている、というのです。

なるほど確かに、Windows標準ブラウザの最大のライバルであるChromeの特徴を取り入れたブラウザを作ってしまえば、より標準ブラウザを使ってくれる人も増えるかもしれませんね。

現在よく使われるブラウザとして、Edge、InternetExplorer、Safari、Firefox、そしてGoogle Chromeと種類があります。
IEを除いてHTML5に準拠しているとはいえ、同じコードを動かしても微妙に異なった動作をすることがあり、Webプログラムを作る際はその差異を埋めるのが結構大変だったりします。

今後、もし記事のようにWindows 10の標準ブラウザがChrome系になれば、少なくともWinodws10の標準ブラウザとGoogleChromeの動作の差異を気にすることなく開発ができることになるので、開発者としてはとてもありがたい話になりそうな気がします。

今後の動きに注目したいですね。

takahashi 著者:takahashi

WordPressの次期メジャーアップデートで実装される記事エディタ”Gutenberg”を使ってみた

WordPressの次回メジャーバージョンアップ WordPress 5.0から新しい記事エディタ”Gurenberg(グーテンベルク)”が実装されるようです。

Gutenberg – WordPress

WordPress 5.0はまだリリースされていませんが、Gurenbergは既にプラグインとして公開されており、既存の4.x系のWordpressでも先行して試すことができます。

ということで、早速、自分の所有するWordpressサイトにインストールしてみました。

インストール後は、管理画面から
投稿->新規追加
をクリックしたときに表示されるエディタが従来のTinyMCEからGutenbergに差し替えられます。
ただし、ダッシュボードや記事一覧の”新規投稿”ボタンに変更が加えられ、ドロップダウンから旧エディタを選択することが可能です。

早速Gutenbergを呼び出してみます。

まず見てわかるのは、入力欄がとても大きくなりました。
トップにタイトルの入力欄、そしてその下には本文入力欄があり、ここまでは従来と変わりませんが、入力してみると…

改行するごとにブロックが分けられ、そのブロックを組み合わせてコンテンツを作っていく編集方式になっていました。
ブロックは自由に入れ替えることができ、別のブロックにしておけばコピペなして内容の順番を入れ替えることができます。

ブロックには文章の外にも画像や動画などを含めることもできます。

ブログのUIを見るとどうしても長文を書かないといけない気になって続かない…なんてこともありますが、GutenbergのようなUIなら、短文を気軽に書いてもいいようなUIになっていて、ミニブログ感覚で無理なく書けるのではないかなと思いました。

なお、Wordpress 5.0以降も従来のエディタを使いたい!という方は、公式でClassic Editorという名前のプラグインで提供されるので、これをインストールすれば引き続き旧エディタが利用できるようです。

ブログは書きたいけどなかなか筆が進まない…という方は一度試してみてはいかがでしょうか?

takahashi 著者:takahashi

Microsoft Officeのアイコンがfluent design準拠のデザインにリニューアルされるらしい。

Microsoft Officeのアイコンのデザインがリニューアルされるようです。

「Microsoft Office」のアイコンデザイン、6年ぶりに刷新へ – ITMedia

今回のデザイン変更は、Microsoftが提案するデザインFluent Design System に合わせた変更とのことです。

今までしばらくフラットなデザインが主流だったMicrosoftのアイコンデザインですが、今回のデザイン変更から、Googleのマテリアルデザインのような立体感のあるデザインへと変わりそうです。

そろそろ単色でフラットなデザインが見慣れててきたところだったので、新しいデザインは新鮮で面白い造形に感じました。

上の動画でちらっとWindowsの画面も出てきますが、そこに表示されるOffice以外のアイコンも変わったいたので、もしかするとWindowsも近いうちに大幅なデザイン変更が行われるかもしれませんね。

Say hello to Microsoft’s new Office icons – Microsoft

takahashi 著者:takahashi

ペアリング済みの端末がPCから離れたときに自動でWindowsをロックする標準機能「動的ロック」

Windows10にはアップデートで知らないうちにとても便利な機能が追加されていることがよくあります。

今回ご紹介する標準機能「動的ロック」もその一つです。

設定は下記手順で行います。(※あらかじめスマートフォンやタブレットをPCとBluetoothでペアリングしておく必要があります。)
まず、スタートメニュー(Windowsアイコン)から歯車アイコンをクリックします。

開いた設定画面から
アカウント->サインインオプション
と辿っていくと、画面の中に”動的ロック”
という項目が見えるかと思います。

項目内の
“その場にいないときにWindowsでデバイスを自動的にロックすることを許可する”
にチェックを入れます。

“ペアリングしたデバイスを探しています”
と出てくるので消えるまで待ちます。

文字が消えれば設定完了です。

この状態で、PCとペアリングしたスマホやタブレットをもってPCから離れると、一定以上の距離に離れてから約1分で自動的にロックされます。
なお、スマートフォンを再び近づけてもロックは解除されませんので注意してください。。

第三者に触られると困るPCを使用していて、いつもついついロックを忘れてしまう方、ロック操作を毎回するのはめんどくさい…という方は是非一度試してみてください。

takahashi 著者:takahashi

【要注意】WIndows に iCloud をインストールしているユーザーはWindowsUpdate経由でOctober Updateを適用できない可能性

WindowsにiCloud for Windows 7.7をインストールしていると、互換性の問題でWindows Update経由のOctober Updateの適用がブロックされるようです。

iCloud for Windows7.7はOctober updateとの互換性がなく、アップグレードツールを用いて手動で行った場合は、October Update適用後にiCloud for Windows 7.7が起動できなくなります。

「iCloud for Windows 7.8.1」を公開 ~「Windows 10 October 2018 Update」に対応 – 窓の社

上記記事によると、リリースノートに修正履歴はないものの、修正が確認されている iCloud for Windows7.8.1 がAppleから公開されており、更新することで問題を回避できるそうです。

iCloud for Windowsを使用されている方で、WindowsにOctober Updateを適用する予定の方は、先にiCloud for Windowsの更新を必ず行ってからWindowsをアップグレードした方がよさそうです。