投稿

5月, 2019の投稿を表示しています

PHPStormでESLintを使って文法チェック

イメージ
PHPStormを使うようになってからは、PHPStormの機能だけでJavaScriptの文法チェックをしていたけど、ちゃんとlintツールを使うように設定したときの覚書。

環境: Windows 10, PHPStorm 2019.1.2

lintはバグの原因になるような曖昧な記述を警告してくれるプログラム(の総称)。
lint - Wikipedia

JavaScriptのLintツールは今なら「ESLint」を使っておけば間違いない。
まずは公式のスタートガイドを読む。
ESLint - Pluggable JavaScript linterGetting Started with ESLint - ESLint - Pluggable JavaScript linter

npmでインストールする。
# npm install --save-dev eslint

設定ファイルを作る
# vi .eslintrc.json

{
  "extends": ["eslint:recommended"],
  "env": {
    "browser": true,
    "jquery": true
  },
  "rules": {
    "strict": ["error", "function"],
    "no-console": "error"
  }
}
PHPStormの設定 公式サイトのヘルプを参考に。
ESLint - Help | WebStorm

ESLintを「Manual ESLint configuration」にする。

.eslintrc.jsonをPHPStormで編集した後は右クリックで「Apply ESLint Code Style Rules」で読み込む。
単独のjsファイルは問題ないのだけれど、PHPファイル内のscriptタグにはESLintでチェックされない?


JavaScriptのコーディング規約 調べる中で「JavaScript Standard Style」というコーディング規約が広まっているのを知…

Postfixのメール送信が遅れる。IPv4の接続を優先する設定

メールログを見ていて下記エラーが目に留まった時の覚書。

環境: CentOS 7.6, Postfix 2.10.1

postfix/smtp[13310]: connect to gmail-smtp-in.l.google.com[2404:6800:4008:c01::1a]:25: Connection timed out
postfix/smtp[13310]: Trusted TLS connection established to gmail-smtp-in.l.google.com[108.177.125.26]:25: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
最初のログはIPv6で接続しようとしていてタイムアウトしている。
タイムアウトを待つ分だけメール送信に時間が掛かっていた。

IPv6を無効にするのも何となく不安なので、IPv4から先に試すように設定。
「smtp_address_preference」を使う。Postfix 2.8から使える設定。
Postfix Configuration Parameters
Postfixのバージョンを確認
# yum info postfix

postconfを使う方法もある
# postconf -d | grep version

設定ファイルを編集
# less /etc/postfix/main.cf
# Enable IPv4, and IPv6 if supported
inet_protocols = all
# Try IPv4 first
smtp_address_preference = ipv4
testしてサービス再起動
# postfix check
# systemctl restart postfix

ログを監視しながら動作確認
# tail -f /var/log/maillog
# mail hoge@gmail.com


【関連記事】
CentOS7で/var/log/maillogを作るrsyslogのインストールと設定CentOS7 + Nginx + PHP7 + MariaDB + Node.jsの環境を構築する手順まとめ

CentOS7で/var/log/maillogを作るrsyslogのインストールと設定

KagoyaのVPSの最小構成で作成したCentOS7がmaillogを作ってくれず、しばらく放置していたけど、rsyslogをインストール/設定したときの覚書。

環境: CentOS 7.6, rsyslog 8.24.0

rsyslogのインストール
# yum install rsyslog

設定の確認
# less /etc/rsyslog.conf
# less /etc/rsyslog.d/listen.conf

初期設定でjournalを監視してくれている。

サービス起動と自動起動設定。
# systemctl start rsyslog
# systemctl enable rsyslog

前に設定したjournaldの設定変更。
# less /etc/systemd/journald.conf

#Storage=persistent
サービス再起動
# systemctl restart systemd-journald

rsyslogの稼働状況を確認
# systemctl status rsyslog
rsyslogd[12874]: imjournal: begin to drop messages due to rate-limiting
rsyslogd[12874]: imjournal: 198872 messages lost due to rate-limiting
メッセージが捨てられているようなログ。
Ratelimit.Interval(デフォルトで600秒)の間にRatelimit.Burst(デフォルトで20000)のメッセージ数を超えていると出力されるらしい(参考:imjournal: Systemd Journal Input Module | rsyslog 80488ad docs)。
この設定を変更する。
# less /etc/rsyslog.conf
# @see https://www.rsyslog.com/doc/v8-stable/configuration/modules/imjournal.html
$imjournalRatelimitInterval 60
$imjournalRatelimitBurst 200000 「$ModLoad imjournal」のあとに記述する。
$imjournalRat…

WordPressのwp_mailをSMTP経由にする

特定の機能から送ったメールだけSMTP経由で送信したかったので、調べた時の覚書。

環境: WordPress 5.2.0, PHP 7.2.18

全部のメールをSMTP経由にする場合はプラグインを使った方がいいかもしれない。
WP Mail SMTP by WPForms | WordPress プラグイン | WordPress.org

公式ページに「phpmailer_init」にフックするやり方がある。Gistも参考に。
wp_mail() | Function | WordPress Developer ResourcesConfigure WordPress wp_mail function to send through SMTP server http://b.utler.co/Y3 | Gist

ソースコードはwp-includes/pluggable.phpの484行目あたり。

PHPmailerの仕様はwp-includes/class-phpmailer.phpを見れば分かる。



【関連記事】
PostfixにSPFとDKIMと暗号化の設定まとめGmail(Google Apps)経由でメールを送信するPostfixのSMTP設定

IE9での表示確認。ホームページ制作で対応すべきIEのバージョンは?

今(2019年5月)だとどこまでのIEに対応してないといけないか調査したときの覚書。
期限の切れたブラウザは大幅にレイアウトが崩れなければOK。

Googleアナリティクスでシェアを確認 とあるサイトで確認した結果(Google Analyticsの実データ)。IEのシェアは全体の1割程度
さらにその中の割合
IE11: 83.9%(全体の8.4%)IE9: 15.2%(全体の1.5%)IE10: 0.5%(全体の0.05%)IE8: 0.1%(全体の0.01%)IE7: 0.1%(全体の0.01%)
意外にIE9が多い。
たぶんWindows VistaがIE9までだからだと思う。
今後はIE9までにすることにした(今まではIE8まで)。

各IEのサポート期限は公式サイトを参考に。
Windows 10 に搭載される 2 つの Webブラウザ、Microsoft EdgeとInternet Explorer 11 - Windows Blog for Japan

ちなみにTLSのバージョンも考慮する必要がある。
Template:ウェブブラウザにおけるTLS/SSLの対応状況の変化 - Wikipedia
ホームページ制作ではあと数年Bootstrap v3にお世話になりそう。


IE9のVMをダウンロード Microsoft公式サイトから仮想マシンをダウンロードする。
Free Virtual Machines from IE8 to MS Edge - Microsoft Edge Development
VMwareはimportに失敗したので、Hyper-Vをダウンロード。
起動すると(なぜか)IE8だったので、Windows7用IE9のインストーラーを公式サイトからダウンロードしてインストール。
(公式サイトにIEでアクセスすると固まるのでFirefoxをインストールした)
インストール完了後は「checkpoint」しておく。

デスクトップの壁紙風の値
IE Version: 9.0.8080.16413RC
OS Version: Windows 7
Service Pack: Service Pack 1


IE9対応 IE9からはHTML5とCSS3に対応している。使えるHTML5タグは下記を参考に。
HTML5 Support in Internet E…

CentOSのMariaDBを10.1から10.3にアップグレード

MariaDBを10.1から10.3にアップグレードした時の覚書。

環境: CentOS7.6, MariaDB 10.1.40

10.1のサポートは2020年10月まで。
参考: Maintenance Policy - MariaDB.org

手順は公式サイトを参考に。
Upgrading from MariaDB 10.2 to MariaDB 10.3 - MariaDB Knowledge Base

1.バックアップ mariadbbackupというツールがあるのでインストールして使ってみる。
参考: Full Backup and Restore with Mariabackup - MariaDB Knowledge Base
# yum install MariaDB-backup

保存する場所を作ってバックアップ実行
# mkdir /home/backup
# mariabackup --backup --target-dir=/home/backup/20190515 --user=root --password=mypassword

容量(サイズ)の確認
# du -hx --max-depth=1 /home/backup/20190515/

念のためphpMyAdminからもエクスポートしておく。



2.アンインストール サービスを停止
# systemctl status mariadb
# systemctl stop mariadb

YUMでアンインストール
# yum remove MariaDB-server


3.インストール YUMのリポジトリを修正(参考: MariaDB - Setting up MariaDB Repositories - MariaDB
# less /etc/yum.repos.d/MariaDB.repo

# MariaDB 10.1 CentOS repository list - created 2016-04-07 10:30 UTC
# http://mariadb.org/mariadb/repositories/
#[mariadb]
#name = MariaDB
#baseurl = http://yum.mariadb.org/10.1/centos7-amd64
#gpgkey=https://…

システムからSMS(ショートメール)を送るAPI調査

予約システムを設計しているときに、登録したスマホ(電話番号)にSMSを送れないかと調査したときの覚書。

有名どころではTwilioというサービスがいいらしい。
SMS, Short Message Service | Text Messaging for Mobile & Web AppsTwilio を介した SMS サービスと音声サービス | PHP の App Engine スタンダード環境 | Google Cloud

日本ではKDDIが代理店になっている。
Twilio for KDDI Web Communications  | コミュニケーションAPI


Asterisk(PBX)で試した人の記事
Asteriskで普通の外線電話を作る - Qiita


AWSのAmazon SNSを使う方法もある。
受信者が携帯電話番号の場合のユーザー通知に Amazon SNS を使用する (SMS 送信) - Amazon Simple Notification Service

その他のアイデア
AndroidのSmsMnager, MessageClientを使った自作アプリと連携する仕組みを作るLine APIを使う方が日本ではいいかもしれない



【関連記事】
Google Voice, Asterisk, Androidで面白いことが出来そうな予感

Google Compute Engineの無料枠を使ってサーバーの死活監視

オフィス出るときに開発サーバーをShutdownするつもりが本番サーバーをShutdownしてしまったので、常にサーバーを監視してアラートを送る仕組みを作ろうとしているときの覚書。


やりたいこと
別サーバーから本番サーバーを監視無料死活監視(Ping)Pingが通らなかったらメール通知bash + cronがいい。複雑なことしない。プラスアルファでウェブサイトの表示確認ができたら嬉しい。
本番サーバーは別でリソースモニターがあるのでそちらで十分

調べてみるとサーバー監視ソフトのZABBIXが良さそう
Zabbixオフィシャル日本語サイト :: エンタープライズクラスの分散監視オープンソースソリューション 試してみたくはなるけど、ここまでの機能は必要ない。


Pingを並列処理できるfpingを使えば良さそう。
fping Homepage でも結局使わなかった。


参考にしたシェルスクリプト
UNIX / Linux Shell Script For Monitoring System network with ping command | nixCraftA simple bash script to watch packets loss using ping on Unix/Linux | GistWrite the bash shell script to test the ping against multiple server and send the report to email for unresponsive servers - Stack Overflow
監視サーバーはGoogle Cloud PlatformのVMインスタンスの無料枠を使うことにした。
インストールと設定は長くなったので別記事にまとめた。
Google Cloud PlatformのGCEでCentOS7のVMインスタンスをインストールしてメール送信設定
作成したシェルスクリプトはGitLabに保存。
Gistにあったのからほとんど変えてない。
GCEのVMインスタンスでgit cloneする。

5分毎にcrondで定期実行する。
rootになってから。
$ sudo su -
# cd /etc/cron.d/
# vi plwatch
MAILTO=""
# Packet…

Google Cloud PlatformのGCEでCentOS7のVMインスタンスをインストールしてメール送信設定

本番サーバーに対してPing死活監視するサーバーを準備しているときの覚書。

GCE(Google Compute Engine)の無料枠を使う。

参考サイト
よくある質問 | Google Cloud Platform の無料枠 | Google Cloudこれから始めるGCP(GCE) 安全に無料枠を使い倒せ - Qiita

無料枠にするための注意点
マシンタイプを「f1-micro」を選ぶリージョンを「us-west1」を選ぶ(us-east1, us-central1も無料枠の対象)条件が変わる可能性が大いにあるので、公式ドキュメントをよく読む
このVMには頻繁にログインしないので「ブラウザからのSSH」で十分。
どうしてもTeratermでログインしたい場合は結構面倒くさい作業が必要。
高度な方法を使用してインスタンスに接続する | Compute Engine ドキュメント | Google Cloud

稼働中のサービス確認
$ systemctl list-units --type=service

登録されている全サービス確認
$ systemctl list-unit-files --type=service


サブドメインをCloud DNSで管理する設定 Cloud DNSを使うと良さそうな気がしたのでやってみた。
Cloud DNSでゾーンを作成した後にName Serverが表示されるので、レジストラのDNSを変更する。
value-domainの場合の例。
ns gcp ns-cloud-a1.googledomains.com.
ns gcp ns-cloud-a2.googledomains.com.
ns gcp ns-cloud-a3.googledomains.com.
ns gcp ns-cloud-a4.googledomains.com.

エフェメラル(ephemeral)な外部IPをCloud DNSで動的に変更したい
エフェメラルだとVMが再起動したときに変わってしまう(参考:IP アドレス | Compute Engine ドキュメント | Google Cloud)。

Cloud DNSを使うと簡単に設定できるかと思ったら、APIを叩く必要があるみたい。
How to update Google Cloud DNS with ep…