信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    素敵だら! Linux コマンド ~基本編~

    こんにちはうなぎです。IT開発者にとって避けては通れない数ある Linux コマンドのうちから、厳選してご紹介する不定期コーナー“素敵だら! Linux コマンド”。本日は「~基本編~」。基本的かつ必要不可欠となるコマンドです。lscdcp■ ls`ls` は指定されたディレクトリにあるディレクトリ・ファイルの情報を出力するコマンドです。オプションに `ls -la` などとすれば、隠しファイル、カレントリ・親ディレクトリを含む全てのディレクトリ・ファイル(`-a`)を詳細な(`-l` )情報とともに出力することができます。オプション `-la` は便利なので、しばしば `l` や `ls` のエイリアスに設定されることもあります。`-la` しか普段使いされないといってもよいほどですが、もちろんオプションはそれだけではありません。`-h` `--human-readable` はファイルサイズの単位を 4096 であれば 4.0K のように読みやすい形で出力してくれます。`-m` はリスト対象をカンマ区切りで出力してくれます。などなど、ほかにも意外と便利なオプションが揃っています。また、他のコマンドと組み合わせて使われることもあります。例えばカレントリディレクトリ内にあるファイル数を知りたい場合はls -A | wc -l などとすることで、カレントリ・親ディレクトリを除く(`-A`)全てのディレクトリ・ファイルの数を集計(`wc -l`)できます。Linux には“パイプ”と呼ばれるものがあり、パイプはコマンド(プロセス)の出力を別のコマンド(プロセス)に入力することができ、上記のように縦線(|)で書き表されます。`ls` コマンドで出力した情報をこの“パイプ”機能によって他のコマンドに渡すことにより、より有用な情報を得ることができるわけです!■ cd`cd` はディレクトリを移動するためのコマンドです。オプションはあまりないので、しばしば使う小技をご紹介します。ホームディレクトリに移動するcd `cd` だけです。ホームディレクトリとは echo $HOME などとすると表示されるディレクトリで、ログイン直後は大体そのディレクトリに居ることになります。ひとつ前のディレクトリに戻るcd - ハイフン(`-`)をパスにすることで、ひとつ前に居たディレクトリに移動することができます。一つ前のコマンドで指定したディレクトリに移動するcd $_ `$_` は Bash の環境変数で、最後に実行したコマンドの引数が格納されています。例えばあるファイルの場所を確認するために `ls` コマンドを使用し、そのファイルが見つかったとします。次にそのディレクトリに移動したいものの、もう一度パスを指定するのが面倒ですよね?そんな時に上記のコマンドを実行することで、入力を省略することができます!※ Bash とは Linux OS を動かしているコア部分(カーネル)に処理を中継いでくれる、コマンドベースのインターフェースを持ったソフトウェアの一つです※ 他にも csh, ash, zsh などがあり、最近では fish が人気のようです`$_` 他、Bash の環境変数については以下を参照https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html■ cp`cp` はファイルやディレクトリをコピーするコマンドです。第一引数にコピー元、第二引数にコピー先を指定します。また、ディレクトリをコピーする時には、再帰コピーを示す `-R, -r, --recursive` のいずれかのオプションをつける必要があります。他にもコピー先が既に存在していた場合に強制上書き(`-f`)したり、上書き時に確認をする(`-1`)オプションなどがあります。単純にディレクトリやファイルを別の場所にコピーする際に使用する他にも、例えば設定ファイルを編集する前にバックアップを取っておきたいときなどは、cp file{,.back} とすると便利です。上記ではコピー先となる第二引数を省略し、コピー元のファイル名に `{,.back}` を付け加えています。こうすることで結果、実行したディレクトリでは file.back が生成されます。わざわざ第二引数を指定しなくて済むわけです!この `{}` は“ブレース展開”というもので、cp コマンドに限ったものではなく、例えば ファイルを移動する・ファイル名を変更する際に使用する `mv` では、mv file{,.old} とすることで、ちょっと名前を変えてファイルを置いておくこともできます。“ブレース展開”は他にも一度に複数のファイルを指定したりできるなど面白い機能ですが、今回は割愛します。`{}` については以下を参照https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html以上少ないですが、`ls`, 'cp', 'mv' のご紹介でした。
  • テクログ

    HPを開くのに時間がかかる、または開きが悪い時

    外部にpingを送ると数%損失が出ていたので調べてみた。ルーター自体は接続中になっており他のPCでもネットが繋がるのでルーターが原因で切れてはいないよう。とりあえず各当PCを見るが特に変わった設定もしていないし、ファイヤーウォールが原因で切れているようでもない。以前ネットで見たIPv6を使わない設定にすると通信が安定するとあったので復習の意味も込めて試す事に。1 ネットワーク接続からローカルエリア接続を右クリックでプロパティ。2 インターネットプロトコルバージョン6のチェックを外す昔はこれでOKと言う記事があったがさらに必要な作業もあるとのことで以下も試してみました。3 構成ボタンを押し、TCP チェックサムオフロード(IPv6)UDPチェックサムオフロード(IPv6)一括送信オフロード v2(IPv6)上記項目を無効にしてOKボタン。その後同じようにpingを送ると損失が明らかになくなった。処理をする前は300の内15%位が損失になっていたのでかなり効果があった結果になりました。
  • テクログ

    データベースに関するTips

    どうも、もう少しで50歳(半世紀)になる大西です。開発に携わっていると同じ結果を導くにあたり多くの手法が存在する事に気付くだろう。1つしか手法を知らず後になって損をしていた事に気付く・・・そのような経験も多いのではないだろうか。データベースについては30年以上前から今だに「そのような手法があるのか」と感心する事が多々ある。今回はデータベースの中でも MySQL に関しての「その方法でも出来るね」について記そう。■ TIMESTAMP および DATETIME の自動初期化および更新機能さて、まずはこれだ。最近でもカラムとして登録日時と最終更新日時を持たせている設計を多く見かける。きちんとシステム上必要なのであれば良いのだが「とりあえず入れとけ」は止めて頂きたいと常に思っているカラム達だ。このカラムが存在するにも関わらず無視しているプログラムは論外として、INSERT 時に「登録日時」と「最終更新日時」を、UPDATE 時に「最終更新日時」を、それぞれ NOW() を使用して値をセットするプログラムを多く見かけるのだが、経験上データベース側の日時値ではなくプログラム側の日時値でお願いしたい(プログラム側で日時データを作りその値をデータベースに適用するようにして欲しいのだ)。特に MySQL の日時については Ver8.0 になっても 2038年問題は残ったままのようだしプログラム側の日時値でお願いしたいものだ。何はともかくこれら私の希望を一旦棚の上に置くとして、登録日時と最終更新日時カラムが単にそのレコードの登録/更新の日時を表すだけならば NOW() を使うのは避けるべきだと述べておく。ではどうするのか。それは INSERT の時は登録日時と最終更新日時を、UPDATE の時は最終更新日時だけを自動でセットするようにすれば良い。テーブルを見てみよう。Create Table: CREATE TABLE `TBL_TEST` (     `key` varchar(32) NOT NULL,     `value` text NOT NULL,     `update_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,     `create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,     PRIMARY KEY (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 update_at カラムはデフォルト値として CURRENT_TIMESTAMP を、そして ON UPDATE CURRENT_TIMESTAMP で更新時はその時の日時をセットするカラムにしている。create_at カラムは update_at と同様だが更新時には反応しないカラムにしている。INSERT してみる。mysql> INSERT INTO `TBL_TEST` (`key`,`value`) VALUES ('test','hoge'); mysql> select * from `TBL_TEST`; +------+-------+---------------------+---------------------+ | key  | value | update_at           | create_at           | +------+-------+---------------------+---------------------+ | test | hoge  | 2018-01-13 02:01:04 | 2018-01-13 02:01:04 | +------+-------+---------------------+---------------------+ update_at、create_at 共に自動セットされている。UPDATE してみる。mysql> UPDATE `TBL_TEST` SET value='fuga' WHERE `key`='test'; mysql> SELECT * FROM TBL_TEST; +------+-------+---------------------+---------------------+ | key  | value | update_at           | create_at           | +------+-------+---------------------+---------------------+ | test | fuga  | 2018-01-13 02:01:38 | 2018-01-13 02:01:04 | +------+-------+---------------------+---------------------+ update_at のみ自動セットされている。最近はデータベース等のレコード結果を KVS などにキャッシュし高速化を図る手法も多く見かける。その場合も NOW() は避けよう(繰り返すが本心はプログラム側で生成した日時値をセットして欲しい)。何にせよ SQL もスッキリするしこちらの方がエレガントなので是非とも検討/実践して欲しい。■ SQL_CALC_FOUND_ROWS次はちょっとした Tips のようなものだ。検索結果などを表示する場合にはページングというテクニックを使用する場合があると思う。その場合ページングのため(結局何ページ分必要なのかを先に知る必要があるため)総レコード数を知る必要がある。この際に同じ WHERE句 で SELECT と COUNT(*) を発行して1ページ分のレコードと総レコード数を取得するプログラムを多く見かける。このような場合は SQL_CALC_FOUND_ROWS と FOUND_ROWS() を使うと良いだろう。mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE `hoge`>100 LIMIT 10; mysql> SELECT FOUND_ROWS(); 最初の SELECT で条件に合致するデータセット(1ページ分)が取得出来て、次の SELECT で条件に合致する(OFFSET / LIMIT 無関係の)レコード総数が取得可能だ。SELECT を2回発行する事に変わりはないのだが、こちらの方がエレガントであろう。今回は案件でも多用しているであろう MySQL についてその Tips 的な事柄を書いてみた。この他にも MySQL には寿司ビール問題やハハパパ/アルファベットの大文字小文字問題といったキャラセット/コレーションに関する問題もある(これらの問題について知らないというエンジニアは今すぐ調べて欲しい)。MySQL もこれら問題に対応すべくデフォルトの設定を見直すなど出来るところから対応してくれている。プログラムやシステム、ミドルウェアのデフォルト設定などが「そうなっている」のには必ず理由があるものだ。その理由を知るだけでもスキルアップに繋がると思う。手元を見返し「そうなっている」理由を是非とも考えて欲しい。それではまた。
  • テクログ

    忘れがちなあなたへ【IFTTT】

    こんにちは、じゅんすです!学校、会社で何かの当番を任されたけれど、「あ、そういえば今日は自分が当番だった...。」なんて忘れてしまうことありませんか?意識しているつもりでもつい忘れてしまったことは少なからず1度は経験しているんじゃないでしょうか。そこで僕がちょっと注目している、というか使っているサービスについてご紹介しようと思います!それは「IFTTT」という異なるソーシャルメディアやプラットフォームを連携させるWebサービスです!これで一体何ができるのかというと、例えば、「Gmailに画像が添付されていたら、その画像をDropBoxに保存する」「Twitterで特定のツイートをEverNoteに保存する」「LINE等で特定の人に指定した日時になったら通知を送る」といったことを自動で行ってくれるのです!僕は普段LINEと連携させてこの通知機能を使っています!なので今回は通知機能が使えるまでの手順を簡単に書いていこうと思います。①IFTTTサービスページ(https://ifttt.com/)に行ってアカウントを作成し、ログインする。 ※Google、Facebookのアカウントでもログインすることができます。②画面上部の「My Applets」をクリックする。③画面右上の「New Applet」をクリックする。④大きく表示されている「if +this then that」の「+this」をクリックする。⑤どのサービスを使うのか求められるので、自分が使いたいものを選択する(今回は通知機能についてなので「Date&Time」を選択)。⑥どのタイミングで通知させるのか求められるので、自分の設定したいものを選択する。 ※左上から、以下のようになっています。 「毎日〇〇時〇〇分」 「毎時〇〇分」 「毎週〇曜日の〇〇時〇〇分」 「毎月〇〇日の〇〇時〇〇分」 「毎年〇〇月〇〇日の〇〇時〇〇分」⑦自分で日時を設定し、「Create trigger」をクリックする。⑧すると「if (Date&Time) the +that」という大きな文字が表示されるので、「+that」をクリックする。⑨この通知機能をどのサービスで扱うかを選択する(chatwork、LINE等)。 ※現状、LINEでは「Send message」しかないけれど、画面下の「Suggest a new action」で新たに通知機能の使い道を提案することも可能です。 chatworkでは接続する際にAPIを利用する権限が必要とのことです。 とりあえずLINEで使う体で続けますね!⑩選択したサービス(LINE)で設定した通知機能の詳細を以下のように設定する。 「Recipient」 ⇒ どの部屋で通知を受け取るか 「Message」    ⇒ どういった内容の通知にするか 「Photo URL 」⇒ 通知メッセージに画像を載せる⑪詳細設定が完了したら「Create action」をクリックする。これで完了です!!僕はまだ通知機能しか触っていないので、後々他の機能も試してみようかなと思っています!スケジュール管理のサポートツールとして、皆さんも試してみては如何でしょうか!それではっ!
  • テクログ

    AWSソリューションアーキテクトと不思議のAPNダンジョン

    はいどうも、今日のAPN探訪のお時間がやってきました。渋谷・新宿・梅田ダンジョンよりも高度と噂されるAPNダンジョン、ランダム生成されているのではないかというリンクの海をくぐりぬけ、我々はAWSソリューションアーキテクトの申込みを完了したのであった。。。(つづかない)-----------------------過去問サンプルをみて、「これならいけるかな?」というかんじではありましたが、対策テキストをお借りしまして見ていました。そこはかとなくAWSを使っていて感じていたことが、そういう思想で作られてるんだな、ってのがわかってなかなか面白かったです。ぼんやりと思っていたことが、外部講習などで補強される感じに近いでしょうか。いわゆる「コードだけ書けばいい」と言われることが多くなったように、それを実現するための可用性や内部的なしくみはこっち(AWS)がやるから、もっとバンバン実際に動くところ作っていけよ!というメッセージというか、そういうものだったんですね。『こまけえこたぁいいんだよ、ここは任せてお前は先にいってコードを書け!』という感じでしょうか。「チューニング?まあそれも大事かもしれないけどハードも毎回変わるし大変だろ??(Netflixはやってるってありましたけど)そんなことよりどんどんEC2の世代あげろよ!安いし30%高速だぜ!」みたいなかんじですね。まあ大体の場合が問題ない設定になってるし、と。ぽんぽん変わるのに腰をすえてじっくりチューニングしてもすぐ次が来る、って感じだと思います。間に合わん。クラウドのときは頭を切り替える、些事はほっといて大事なことをやる、ってのが大事だな、と再認識しました。-----------------------完全にポエムですがそういうときもありますよね。
  • テクログ

    410からの〜お知らせページ表示〜

    内部的に「Lambdaとはなにか会」をやったり「単体テストを普及させて幸せになりたい」なって思っていろいろやったりしてる昨今、いかがおすごしですか。さて、突然ですがステータスコード404ってのはよく見かけますが、410ってあんまりピンと来ないですよね。簡単に言うと404は意図的なのか、単に今みれないのかわからないけど、なんかページがない、410は意図的になくなりました!という、みたいな違いらしいです。参考ページ:https://www.seo-ch.jp/news/470で、特集ページなどをhttps:/サイトドメイン/hogehoge/などで作っていて、特集が終わったりして、『無くなったよ!』と伝えたい気持ちが高まった場合、どうするんでしょうか。(+で、このページはなくなったんです、というお知らせも表示したい気持ちもあります)こうします!ErrorDocument 410 /hogehoge/index.html <IfModule mod_rewrite.c>   RewriteEngine On   RewriteCond %{REQUEST_URI} ^/hogehoge/index.html$   RewriteRule ^.*$ index.html [L]   RewriteCond %{REQUEST_URI} ^/hogehoge/$   RewriteRule ^.*$ index.html [L]   RewriteRule .* - [G] </IfModule> /hogehoge/index.htmlが告知ページです。ルートの場合/またはindex.htmlへのアクセス以外は、一番下の  RewriteRule .* - [G] で410へ飛ばします。それだけだと410エラーが表示されますので、もしも410エラーのときにはindex.htmlを出す、ということを1行目でかいています。これで410を出したい気持ちを解消することができましたね!めでたしめでたし。以下は開催したLambdaとはなにか会のスライドの端っこです。見栄えのためです。