TechNow! 編集部一覧

MacBook の起動音を永久消音する方法

MacBook Air, MacBook などで電源を入れると「ジャーン」と鳴るMacの起動音、Macを買って最初のうちこそ「おーMacを買ったんだなあ🤤」とひと時のホノボノ感に浸ることもあったりしますが、そのうち慣れますし、起動音が邪魔になるシチュエーションだったりしても、当然ながら一度起動しないと起動音は消せません😱
静かさが求められる場所で、あの「ジャーン」は周囲に迷惑でしかありません。マナーモードのスイッチがあるわけでもなく困ったもの。
で、よくよく考えると、Macの起動音ってデメリットしかない事に気付くのですが。

そこでお悩みのあなたに! MacBook の起動音を消す方法をご紹介します。

特別なアプリをインストールする必要なんかありません!コマンドラインからコマンド一発実行すれば起動音は永久消音できます。

アプリケーション>ユーティリティ>ターミナル を選択してターミナルを開き、下記コマンドをコピペしてエンターキーを押してください。
パスワードを聞かれるので、パスワードを打ってお終い。試しに MacBook を再起動してみましょう。ほら、起動音が無音になっていますよね。

$ sudo nvram StartupMute=%01

やっぱり起動音が欲しい!聞きたい!と思ったら、ターミナルで下記コマンドを実行すれば起動音が復活します。

$ sudo nvram StartupMute=%00

これであなたの MacBook の起動音は自由自在!


UglifyJS 3 – JavaScript 軽量化 (難読化) 入門

JavaScript を難読化&軽量化したいならば UglifyJS 3 を使うのが便利です。
この記事では UglifyJS 3 の使い方をわかりやすく説明します。

オプション

-h, –help 使用法の情報を表示する。
使用可能なオプションの詳細については、「–help options」を参照してください。
-V, –version バージョン番号を表示する。
-p, –parse <オプション> パーサオプションを指定します。
`acorn` 解析にはAcornを使用します。
`bare_returns` 関数外でのリターンを許可します。
CommonJSを小さくする場合に便利です。
モジュールとユーザスクリプト
匿名関数のラップ(IIFE)
で指定します。ユーザー。jsエンジンの`caller`。
`expression` 単一の式をパースします。
プログラム(JSONのパース)。
`spidermonkey` 入力ファイルがSpiderMonkeyであると仮定する
AST形式(JSONとして)。
-c, –compress [オプション] 圧縮を有効にする/圧縮オプションを指定する
`pure_funcs’ 安全に実行できる関数のリスト
戻り値が
使用されない。
-m, –mangle [オプション] mangleの名前を変更/manglerのオプションを指定:
「予約済み」 削除してはならない名前のリスト。
–mangle-props[オプション]mangleプロパティを編集/manglerオプションを指定:
`builtins`重複するプロパティ名をマングル
を使用します。
`debug`デバッグ接頭辞と接尾辞を追加します。
「domprops」 重複するプロパティ名をマングル
と同じです。
`keep_quoted`mangleのみ


Materialize CSS でマテリアルデザイン入門

マテリアルデザインとは

マテリアルデザインとは、2014年に Google社によって発案されたデザインコンセプトです。
主に Android のUI のために考案され、仮想的である画面のタッチ操作や見え方(ユーザインタフェース)を現実の紙のように近付けて自然な操作を実現しようというものです。

マテリアルデザイン・コンセプト公式サイト(英文)

Materializeとは

では次に Materialize (マテリアライズ)とはですが、先程のマテリアルデザインのページを実際に作成するためのCSSフレームワークが Materialize です。

マテリアルデザイン・フレームワーク Materialize 公式ページ(英文)

実際に Materialize を使う

それでは百聞は一見に如かず。入門編なので一番簡単なサンプルページを作ってみましょう。
下記のコードをそのままテキストエディタなどにコピペするだけで動作します。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>マテリアルデザイン</title>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<style>
* {
box-sizing: border-box;
}
</style>
</head>
<body>
<!-- プッシュボタン -->
<a class="waves-effect waves-light btn-small">送信ボタン</a>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script> $(function () { }); </script>
</body>
</html>

このソースで上図のようなプッシュボタンだけのページが表示されたはずです。
ちなみにソースには、このままテンプレートとして使えるよう空のjQueryも埋め込んであります。

これだけで、エフェクトで飾られたプッシュボタンが作成できました。

何もインストールせずにmaterializeが動作しているのは CDN (Content Delivery Network) を使っているからです。CDNとはネットワークで利用できるコンテンツです。CDNを使うことで自分のサーバへコンテンツ(今回の場合 materialize ライブラリ)をインストールすることなく利用する事が可能となります。

以下にmaterializeライブラリのCDNを示します。これらをコードに含めれば materialize が機能します。

materializeのスタイルシートのCDN

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">

materializeのJavaScriptのCDN

<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>

Materializeのレスポンシブ・グリッドレイアウト

Materializeでは、Bootstrap同様に横幅をトータル12分割したレスポンシブデザイン対応のグリッドレイアウトが採用されています。

基本のグリッド

下記にサンプルコードを示します。

<div class="row">
  <div class="col m1 amber center">1</div>
  <div class="col m1 yellow center">2</div>
  <div class="col m1 amber center">3</div>
  <div class="col m1 yellow center">4</div>
  <div class="col m1 amber center">5</div>
  <div class="col m1 yellow center">6</div>
  <div class="col m1 amber center">7</div>
  <div class="col m1 yellow center">8</div>
  <div class="col m1 amber center">9</div>
  <div class="col m1 yellow center">10</div>
  <div class="col m1 amber center">11</div>
  <div class="col m1 yellow center">12</div>
</div>

<div class="row">
  <div class="col m4 l3 yellow">
    <p>このカラムは小画面12列(無指定)、中画面4列(m4)、大画面3列(l3)で幅指定</p>
  </div>
 
  <div class="col s6 m8 l9 amber">
    <p>このカラムは小画面6列(s6)、中画面8列(m8)、大画面9列(l9)で幅指定</p>
  </div>
</div>

上図がサンプルHTMLを実際に表示したものです。
それぞれのdivタグにあるclassに注目すると、row や col がありますが、これらの意味は

row: 行(ロー)
col: 列(カラム)

です。横一行となるのが row、縦の列が col です。

次に、再び class に注目すると m4 や l3 などで書かれているものがあると思います。これらは幾つの列幅を使うかの指定です。英字+数字の組み合わせの最初の英字の m や l (これらをスクリーン・クラス・プレフィックスといいます)は閲覧者のメディアの画面サイズです。
ざっくり書くと

s: スマートフォン
m: タブレット(パッド)
l: パソコン

という捉え方で構いません。

もし「m4」と指定した場合、タブレット閲覧時には4列の幅で表示するという意味になり、「l3」と指定した場合はパソコン閲覧時には3列の幅で表示するという意味になります。省略時(未記載時)は暗黙で12列幅を使うという事になります。

プッシュとプル

次にカラムを入れ替えるプッシュとプルです。サンプルソースを下に示します。

<div class="row">
 <div class="col m3 green">第一カラム</div>
 <div class="col m9 amber">第二カラム</div>
</div>

<div class="row">
 <div class="col m3 push-m9 green">第一カラム</div>
 <div class="col m9 pull-m3 amber">第二カラム</div>
</div>

上の行はノーマル状態、下の行にはプッシュとプルを設定しました。
すると下の行では第二カラムが左側に来たことが分かると思います。プッシュとプルでカラムの順番を入れ替えることができます。

オフセット

オフセットのサンプルソースを下に示します。

<div class="row">
 <div class="col m6 amber"><span class="flow-text">オフセットなし</span></div>
 <div class="col m6 offset-m4 green"><span class="flow-text">オフセット指定</span></div>
</div>

オフセット指定のしかたは、クラスに offset-m4 などのように offset- を頭に付けて指定します

サンプルは上下両行とも6カラム幅のサイズです。上の行はノーマル、下の行は m4 のオフセット指定をしました。

m4 なので4カラム分の空白が左側にセットされているのがわかります。

セクションと区切り線

セクションはコンテンツをまとめブロック単位にしたものです。
区切り線はコンテンツを分けるために用います。
以下にサンプルソースを示します。

<div class="divider"></div>
<div class="section">
 <h5>セクション</h5>
 <p>内容</p>
</div>
<div class="divider"></div>

サンプルではセクションの上下に区切り線を設置したものです。
区切り線は1ピクセルの線として表示されています。セクションは、1コンテンツ=1セクションという形で用います。

セクションの応用

それでは、セクションについてもう一歩理解を深めてみましょう。
以下サンプルを示します。

<div class="divider"></div>
<div class="row">
 <div class="col s4">セクションA</div>
 <div class="col s4 light-blue">セクションB</div>
 <div class="col s4">セクションC</div>
</div>
<div class="divider"></div>

1行に3つのセクションを横並びさせてみました。12分割を3で割り、それぞれのセクション幅は4カラムで均等にしています。
先程のサンプルと同様に上下に区切り線を入れています。
中央のセクションBには青の背景色を指定しました。

このようにセクションを横並びさせることもできます。
なお、このサンプルでは、それぞれのセクションの幅を均等にしましたが、勿論、s2/s8/s2 とすれば中央セクションのみを広い幅にする事もできます。

レスポンシブレイアウト

次にレスポンシブの動きの理解に進みましょう。

Materializeでは、自動的にレスポンシブデザインに対応しています。私たちが覚えておくべきはスクリーン・クラス・プレフィックス(s2やm4 などの s,m,l,xl)です。どの画面サイズの場合にどのようなレイアウトになるかを知っておく必要があります。

以下にレイアウト表を示します。

想定デバイススマートフォンタブレットノート
パソコン
デスクトップ
パソコン
プレフィックスsmlxl
画面幅
(ピクセル)
600px 以下601〜992px993〜1,200px1,200px 超
コンテナ幅90%85%70%70%

例えばプレフィックスが s の場合は 600px のデバイスで表示する際に有効となります。
これらグリッドシステムを活用して、デバイス毎に最適なレイアウトを組むことが可能となります。

それでは上記レスポンシブレイアウトを応用したサンプルを示します。

<div class="row">
 <div class="col s12 green"><p>s12</p></div>
 <div class="col s12 m4 l2 light-blue"><p>s12 m4</p></div>
 <div class="col s12 m4 l8 cyan"><p>s12 m4</p></div>
 <div class="col s12 m4 l2 teal"><p>s12 m4</p></div>
</div>
<div class="row">
 <div class="col s12 m6 l3 lime"><p>s12 m6 l3</p></div>
 <div class="col s12 m6 l3 light-green"><p>s12 m6 l3</p></div>
 <div class="col s12 m6 l3 orange"><p>s12 m6 l3</p></div>
 <div class="col s12 m6 l3 yellow"><p>s12 m6 l3</p></div>
</div>

このソースを組んだ場合、幅993px以上のデバイス(ノートPCなど=l)で表示すると下図のように表示されます。
下段の l3 が効いていることが分かります。二段目は l2/l8/l2 の指定です。

そしてタブレットなどの場合(幅601px以上=プレフィックス m)は下図のように表示されます。二段目の m4、三段四段目の m6 が効いています。幅はあくまで合計12カラムを超えないので m6+m6 までとなり、それを超えたオレンジ色と黄色の m6+m6 は四段目に配置されました。

次にスマートフォンなどの場合(幅600px以下=s)は下図のように表示されます。s12 が効いています。どの段も s12 に指定したので縦並びになりました。
横幅の狭いスマートフォンには最適な表示になります。

このようにMaterializeを使うことで、マテリアルデザインかつレスポンシブデザインを簡単に実装することが出来ました。

色指定のしかた(背景色)

背景色や文字色を指定する方法ですが、これも簡単でクラスを指定することで実現できます。以下サンプルを示します。

<div class="card-panel cyan accent-2">カードパネル</div>

サンプルコードの実行結果

このサンプルコードではカードパネルの背景色として「cyan accent-2」(シアン色の一種)という色を指定したものです。

materializeで指定可能な色の名称は下の通りです。ちょっと文字が小さいですがこういう感じということだけ覚えて戴ければ良いと思います。

色指定のしかた(文字色)

次にmaterializeで文字の色を指定する方法は、下記のサンプルコードのようにクラスに色の名称を記載することで可能です。

<span class="deep-orange-text text-darken-1">テキストの色を指定してみた</span>

サンプルコードの実行結果

このサンプルでは「deep-orange darken-1」(オレンジ色の一種)の色を指定していますが、背景色指定よりも、もうひと工夫必要で、”-text” や”text-“を付加しなくてはなりません。

「deep-orange darken-1」を文字色にしたい場合「deep-orange-text text-darken-1」という感じでハイフン+textの文字が必要です。ここらへん、ちょっと面倒ですね。

以上、materializeでの色指定のやりかたでした。マテリアルデザイン、意外とかんたんに導入できるんだなと思って戴ければ幸いです。
入門者向けの解説、まだまだ続きます。


Googleの2段階認証でドコモ・au・ソフトバンク等のキャリアメールが規制対象に

2019年12月1日より、Googleの2段階認証でドコモ・au・ソフトバンク 等の国内キャリアメールが使用不可になります。

これら国内キャリアのメールサーバは、いまだTSL等に対応しておらず平文で通信していることからセキュリティリスクが存在するので、グーグル社として2段階認証のセキュリティ確保のための措置と考えられます。

そもそも2段階認証はセキュリティ向上の為の仕組みなので、それに用いられるメールシステムが平文で通信するようでは意味がないわけです。

勿論、これら国内キャリアメール以外にもTSL通信非対応のメールサーバはネット上に存在しますが、流通メール数が格段に多いキャリアメールをBANすることで、よりよいセキュリティ確保が出来るという判断でしょう。

規制対象ドメイン

@ezweb.ne.jp
@docomo.ne.jp
@softbank.ne.jp

メディアの報道

Google公式発表


国会議員の資産を確認する方法

政治倫理の確立、不正防止を目的に、国会議員の資産が国民に開示されています。清く正しい政治には必要なことで、民主主義を採用している先進諸国に於いて政治家の資産状況の開示は世界的な常識となっていて、もちろん日本でもきちんと開示されています。

ただ、この開示情報はどうやって知ることができるのだろうかと思ったことはありませんか?そこで今回、再確認をしてみましょう。

まず国会議員と一言に言っても、我が国では参議院と衆議院の二院制となっていますね。それぞれ開示されています。

開示方法やその要領は法律に則ることになるので法律から考えてみると、
「政治倫理の確立のための国会議員の資産等の公開等に関する法律(平成四年法律第百号)」
で定められているのが分かります。

政治倫理の確立のための国会議員の資産等の公開等に関する法律
電子政府の総合窓口(e-Gov)。法令(憲法・法律・政令・勅令・府令・省令・規則)の内容を検索して提供します。

そして、第七条を読むと、国会議員だけでなく、政令指定都市の市議会議員、県知事、市町村長も資産開示の対象であることがわかります。

第七条 都道府県及び地方自治法(昭和二十二年法律第六十七号)第二百五十二条の十九第一項の指定都市の議会の議員並びに都道府県知事及び市町村長(特別区の区長を含む。)の資産等の公開については、平成七年十二月三十一日までに、条例の定めるところにより、この法律の規定に基づく国会議員の資産等の公開の措置に準じて必要な措置を講ずるものとする。

では実際に、我々国民はどのように開示情報に辿り着けるのか?

衆議院の場合、ホームページでその方法が分かりやすく提示されていました。

衆議院議員の資産等報告書等の閲覧案内

閲覧場所に訪問すれば開示情報を見ることができるとのこと。閲覧場所は永田町の議員会館です。

衆議院第一議員会館
資産等報告書等閲覧室
東京都千代田区永田町2-2-1 地下1階  庶務部議員課内

閲覧できるのは原則、平日9時半〜17時半(12〜13時は休憩時間)です。

電車での行き方は、
千代田線・丸ノ内線で「国会議事堂前駅」(1番出口)もしくは、銀座線・南北線で「溜池山王駅」(5番出口)

地図は公式より引用させていただきます。

資産等報告書等閲覧室案内図

参議院の資産開示

https://www.sangiin.go.jp/japanese/annai/shisan.html

参議院の場合も衆議院と基本同じです。

参議院議員会館
東京都千代田区永田町2-1-1
地下2階 資産等報告書等閲覧室(資産公開室)

政治家の資産公開は、政治の適正化の一環で行われている制度です。有権者として政治の適正化に寄与することにもなるので、一度、閲覧に足を運ぶのも良いかも知れませんね。

閲覧はもちろん無料です。
議員会館に入館する機会もなかなかありませんから、貴重な体験になると思います。永田町周辺の観光のついでに立ち寄るのもオススメですね。


PostgreSQL でデータファイル格納ディレクトリまるごとバックアップ(上級者用)

PostgreSQL でバックアップする場合、通常は pg_dump コマンドを使います。今回は敢えて強引(?)にデータファイルごと根こそぎバックアップする方法をやってみます。

そもそもデータベースはデータファイルにのみ全情報があるのですから、Oracle だろうが SQL Server だろうが、データファイルさえ残っていれば何とかなるわけですから。

この記事の対象は、データベースの構造を良く知っている上級者向けと思ってください。初中級者の方にはあくまでも、それぞれ用意されているバックアップコマンドを使うことを推奨します。

さて本題の手順です

1.データベースファイルを格納するディレクトリを確認

psql に管理者権限でログインして SHOW data_directory を実行します。

$ psql -U postgres

postgres=# SHOW data_directory;
data_directory
——————————
/var/lib/pgsql/9.6/data
(1 row)

postgres=#

こんな感じで表示されます。上記の例では

/var/lib/pgsql/9.6/data

がデータフォルダです。勿論、環境によってディレクトリは異なります。

2.データベースを停止する

ディレクトリごとコピーする場合、必ずデータベース(RDBMS)を停止する必要があります。データベースを動かしながらコピーしたらぶっ壊れます

$ sudo systemctl stop postgresql

3.ディレクトリごとコピー(バックアップ)する

普通にコピーコマンドでディレクトリごとバックアップします。

$ sudo cp -R /var/lib/pgsql/9.6/data ~/backup_db

4.データベースを再起動する

バックアップ(コピー)を終えたらデータベースを再起動します。これですべて完了。

$ sudo systemctl start postgresql

このように至ってシンプル。なのに完璧なバックアップ。
但しRDBMSのバージョンが異なると動作しない場合があります。データベース構造まで熟知している上級者のあなたには理由はわかりますよね。

リストアする場合

逆にこのバックアップのリストア方法ですが、コピーしたディレクトリごと上書きすれば良いです。コピー作業前にデータベースを停止するのは当然ですね。

ちなみにバックアップ(コピー)先ディレクトリでそのまま動作させる事も可能です。

postgresql.conf の data_directory でデータディレクトリを指定してください。

$ sudo vi /var/lib/pgsql/9.6/data/postgresql.conf

data_directory = ‘/home/backup_db/data’ ←お好みのディレクトリ

この方法、実は PostgreSQL だけでなく、ほぼどんな RDBMS でもこんな感じで出来ちゃうので、一応知識として持っていると便利だったりします。


macOS版 IntelliJ IDEA 2019.2 の日本語入力不具合の対処法

 IntelliJ IDEA を 2019.2 にしてから、日本語入力でトラブルが頻発するようになりました。具体的には「ど」と入力しようとすると、ローマ字入力では do とタイプしないといけないのですが、d をタイプした瞬間に変換が勝手に確定されてしまい do と打つまで待ってくれないので漢字変換できない状態になるものです。

 一旦、テキストエディタに日本語で書いてからコピペすることで仮対応していましたが、コードを書く際にいちいち InteliJ IDEA とテキストエディタを往復するのはとてもストレスです。

 これでは堪りません、さすがにリサーチしてみるかと原因究明や対策を探してみたところ、JetBrains日本語公式ブログに対処法がアップされていました。こういうところ、JetBrains社 は頼もしいです。

 細かい手順は下にリンクを貼っておきますので、公式サイトを読んでいただくとして、この公式サイトでは2つの回避策が示されています。私がこの手順でやってみたところ、簡単な回避法の回避策1では何故か起動できませんでした。私の環境なのか原因不明ですが、とにかく起動さえしなくなったので、これではいけません。回避策2の方でやってみたところ、無事起動できるようになりました。

 そもそもこの日本語入力の不具合は毎回必ず発生するものではなく、何かのタイミングで発生していたので、これで解決できているのかは暫く使ってみるしかありません。不具合が発生しない事を祈るばかりです。

日本語公式サイトでの説明
https://blog.jetbrains.com/jp/2019/07/30/2025


ChromeのアドレスバーにフルURLを表示する方法

 最近のブラウザは、アドレスバーにURLをフル表示しないのがトレンドのようですが、正直面倒なことがあったりします。
そこで、フルURLを表示する方法をご紹介します。

至って簡単ですが、

1.アドレスバーに下記をコピペします
chrome://flags/#omnibox-ui-hide-steady-state-url-trivial-subdomains

2.下のように黄色でマークされた部分の右にあるプルダウンメニューで「Disabled」にします。以上!

これでフルURLが表示されている筈です。Enjoy!


yum で競合エラーが発生した際の解決手順

yum の install とか update で競合エラーが発生してしまう場合の解決方法です。
以下のように yum を実行したら競合エラーが発生する場合があります。大事な部分を下記にマークしました。

$ sudo yum install nginx-module-geoip
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ nginx-module-geoip.x86_64 1:1.17.3-1.el7.ngx を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================================================================
 Package                             アーキテクチャー        バージョン                            リポジトリー            容量
================================================================================================================================
インストール中:
 nginx-module-geoip                  x86_64                  1:1.17.3-1.el7.ngx                    nginx                   18 k

トランザクションの要約
================================================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 18 k
インストール容量: 76 k
Is this ok [y/d/N]: y
Downloading packages:
nginx-module-geoip-1.17.3-1.el7.ngx.x86_64.rpm                                                           |  18 kB  00:00:00
Running transaction check
Running transaction test


Transaction check error:
  ファイル /usr/lib64/nginx/modules/ngx_http_geoip_module.so (パッケージ nginx-module-geoip-1:1.17.3-1.el7.ngx.x86_64 から) は、パッケージ nginx-mod-http-geoip-1:1.12.2-3.el7.x86_64 からのファイルと競合しています。

エラーの要約
-------------

このマーカ部分のモジュールが邪魔をしているので、アンインストールします。

$ sudo yum remove nginx-mod-http-geoip-1:1.12.2-3.el7.x86_64
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ nginx-mod-http-geoip.x86_64 1:1.12.2-3.el7 を 削除
--> 依存性の処理をしています: nginx-mod-http-geoip = 1:1.12.2-3.el7 のパッケージ: 1:nginx-all-modules-1.12.2-3.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ nginx-all-modules.noarch 1:1.12.2-3.el7 を 削除
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================================================================
 Package                                アーキテクチャー         バージョン                       リポジトリー             容量
================================================================================================================================
削除中:
 nginx-mod-http-geoip                   x86_64                   1:1.12.2-3.el7                   @epel                    21 k
依存性関連での削除をします:
 nginx-all-modules                      noarch                   1:1.12.2-3.el7                   @epel                   0.0

トランザクションの要約
================================================================================================================================
削除  1 パッケージ (+1 個の依存関係のパッケージ)

インストール容量: 21 k
上記の処理を行います。よろしいでしょうか? [y/N]y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  削除中                  : 1:nginx-all-modules-1.12.2-3.el7.noarch                                                         1/2
  削除中                  : 1:nginx-mod-http-geoip-1.12.2-3.el7.x86_64                                                      2/2
警告: ファイル /usr/share/nginx/modules/mod-http-geoip.conf: 削除に失敗しました: そのようなファイルやディレクトリはありません
  検証中                  : 1:nginx-all-modules-1.12.2-3.el7.noarch                                                         1/2
  検証中                  : 1:nginx-mod-http-geoip-1.12.2-3.el7.x86_64                                                      2/2

削除しました:
  nginx-mod-http-geoip.x86_64 1:1.12.2-3.el7

依存性の削除をしました:
  nginx-all-modules.noarch 1:1.12.2-3.el7

完了しました!

Macで最強のテキストエディタ

日本語に最適化されているテキストエディタ。Windowsならば秀丸エディタの一択でしょう。秀丸エディタは最高の作品です。

ところが macOS で使えるテキストエディタは?となると、テキストエディタは数あれど、どれも帯に短し襷に長し、しっくり来るものが今ひとつありません。

テキストエディタ流民となっている人々(もちろん自分を含め)へテキストエディタ比較をまとめてみます。

ちなみに私が最強とするテキストエディタの条件ですが

  • 起動が早い
  • 検索が日本語に最適化されている
  • 上下カーソル移動が1行ずつ

という感じです。

mi テキストエディタ

まずは mi テキストエディタ。
総じて満足度は高かったのですが、不満点は以下の通りです。

1.起動がもっさりしている。Mac Pro (Late 2013) 3.7 GHz Quad-Core Intel Xeon E5、メモリ32GB という悪くはないハードウェア環境で、2回目起動が 約2.8秒。クリックして一息ついてようやく起動という感覚。ちょっとイラっとする時間です。Sublime Text と比較してみてください。Sublime Text の高速起動には感心させられます。恐らく Sublime Text はネイティブコードで書かれているのだと思います。

2.次に上下カーソル移動が5行単位に画面がジャンプして視点のフォーカスが一瞬迷子になります。1行移動したら1行遷移する方が視点が迷子にならず快適になるのに残念です。

3.これもカーソルがらみですが、ページアップ・ダウンで画面遷移したのに、カーソル行がついてこないので、上下左右キーを押すと元の行にまた戻ってしまいます。UIとしてそれを望んでいるユーザは居ない気がします。

4.検索ボックスでhome/endキーが文字化けします。homeキーで行頭・endキーで行末に慣れているエンジニアにはちょっとしたストレスです。これは仕様ではなくバグのはずなので、早期の修正が望まれるところです。

5.また検索ウィンドウ関連ですが、1回目の検索で空振り(一致キーワードが無かった)の時、ウィンドウが勝手に閉じられてしまって、わざわざ開き直さなければなりません。バグなのか仕様なのか分かりませんが。。。

エンジニアにとってテキストエディタは極力ストレスフリーで、コードを書く以外に無駄なキー操作は極力避けたいものです。それが達成されているなら機能なんて最小限でも構わないくらいです。

近年、テキストエディタが統合開発環境(IDE)化している傾向にありますが、IDEはIDE、テキストエディタはテキストエディタのメリットがあるのですから、それぞれ棲み分けしているのが最善だと思います。

IDEは多機能高機能なので、多少のもっさりは許容できますが、テキストエディタは軽量快速が最上ではないでしょうか?

以上、不満点を挙げましたが、無料でテキストエディタを配布していただいていることへの敬意を忘れてはいけません。作者さんには感謝しています。

そもそも私の Macテキストエディタ探しの旅は Sublime Text, Atom, Cot Editor, Brackets, BBEdit, TextWrangler などを試した後に mi テキストエディタへ辿り着いたのですが、やはり上記不満点で離脱しようと思います。

離脱先は、Visual Studio Code にしました。マイクロソフト謹製でまたもやIDE系なので、もっさりしていそうだという先入観で今まで避けていたのですが、試しに使ってみて意外と軽快さにビックリ‼️
以下、テキストエディタに Visual Studio Code を採用した理由を列挙します。

1.起動が比較的軽快、前述したマシン環境と同じ条件で計測したところ 2.1秒でした。mi テキストエディタより 0.7秒速いだけなのですが、率で表現すれば0.75倍=25%速度向上です。

2.上下カーソルはちゃんと1行ずつスクロールして視点が迷子になりません。

3.ページアップ・ダウンで移動してもカーソル行が付いて来ます。ページダウンで100行まで移動し、そこから下カーソルを押しても101行を指します。

4.検索窓でキーワードを入力すると、リアルタイムでジャンプしてくれるので、エンターキーを押す必要がありません。無駄なキーストローク1回分を省略できるのは助かります。

など、mi テキストエディタの不満部分がとりあえず、すべて解消されているので、暫くは Visual Studio Code を使ってみます。また不満点などあれば記事にします。

あとは Sublime Text くらいの高速起動ができれば百点満点なのですが、総合点では今の所、最善な選択かと思います。