投稿者「sasaki」のアーカイブ

3年目プログラマが参考にしたQiita記事まとめ⑫

概要

特にカテゴリもレベルも偏らずにざっくばらんに、参考になったQiita記事を一言添えて列挙するシリーズ12本目

Qiitaまとめシリーズ

SIerの若手に取ってほしい資格

基本情報技術者なんてプログラマの必須資格じゃないし取る必要なんて無いぐらいに思ってるけど、取ろうと努力しても取れない人はどこか問題ある気がする。学んだことが仕事に使えるとは言わないけど、仕事としてやっていけるかの判断基準にはなり得るのかな。

ぺちぱーのよくばりセット

PHPのTipsリンク集。これは良い。凄い勉強になりそう。PHP好きくないけど、Web系で一番使われてるのも事実だし、PHP7ならそれなりにモダン言語要素あってこの言語、深いっ!となり得るので勉強する価値はある。でもURLがリンクになってないのが辛い。Qiitaの「この記事からリンクされてます」を飛ばしたくないから意図的にそうしたらしい。確かにあの機能強制なの邪魔だなぁ。

新人プログラマがPHPを学ぶべき理由

あ〜、PHPが言語としてアレなのは、それによって仕事量を増やしてエンジニア業界の雇用を増やそうというアレね。把握。
あながち間違いじゃない。

「GoogleAnalytics見てアクセス解析して」って言われた時にまずしていること

本ブログもGoogleアナリティクスを導入していて、色々遊び倒したいんだけど、アクセス数がマチマチなので遊べるほどじゃない。遊ぶためには充実したアクセス数のある環境を用意する必要があるのが辛い。

【シェル芸人への道】Bashの変数展開と真摯に向き合う

前方カット、後方カットは使ったことあるけどこんなにあるんだ。ものによってはスクリプト言語の文字列加工系のメソッド通すより便利?変数展開と加工を同時にするのがRubyにあったら捗りそう。なんとなくPerlにはありそう。

dev.toと阿部寛のホームページについてちゃんと計測させてくれ

最新の技術を駆使して超軽量Webサービスとなったdev.toをあっさり超える阿部寛。後追いの記事も結構あるけど、阿部寛のHPがエンジニア界隈を盛り上げるとは阿部寛も思ってなかったろうに。

【ディレクター向け】成果物の品質を担保するために確認すべき項目

ディレクターに限らず、プログラマも趣味仕事問わずこの辺チェックすると良いかも。特にHTML/CSSのバリデータはちゃんと通して、パスしないとコミットできないぐらいになるとgood

idやclassを使ってテストを書くのは、もはやアンチパターンである

じゃあどうするのって思ったけどテスト専用のデータ属性振ってた。なるほど。明確に目的を分離するのは良さそう。

手書きしたほうが速いメソッドと疎な配列

標準関数が遅いってのはわかるけど、よほどその速度差がボトルネックにならない限りは標準関数で書いたほうがバグが入り込む余地もなくなるし、単純に可読性もあがるし良いと思う。

すぐに役に立つことは、すぐに役に立たなくなること

少なくともプログラマの世界では真な言葉。例えば「Rails勉強してます」は「プログラミング勉強してます」とは言い難い。Railsは特定の手段に過ぎないので勉強って言葉がそもそもあわない気がする。プログラミングの勉強というならパラダイムとか設計思想とか、アルゴリズムとかその辺なんじゃないかな。その辺をちゃんと勉強するかどうかで将来左右しそう。

[node] cheerio-httpcliで、レスポンスから現在のURLを取得する

概要

nodeでWebスクレイピングする際に、cheerio-httpcliを採用したが、要素クリックなどで画面遷移した先のURLを取得する方法で詰まったので、その解決方法の備忘録を残す。

コード例

以下では、Googleにアクセスし、キーワードに「デグー」と入力後、検索ボタンをクリック。ページ遷移後に、現在のURLを標準出力している。

const client = require('cheerio-httpcli')
client.fetch('https://www.google.co.jp/')
  .then((result) => {
    result.$('input[name=q]').val('デグー')
    return result.$('input[type=submit]').click()
  })
  .then((result) => {
    console.log(result.response.request.uri.href)
  })

実行結果

$ node hoge.js
https://www.google.co.jp/search?source=hp&ei=5exJWtraMMK60ATpuLewAQ&q=%E3%83%87%E3%82%B0%E3%83%BC&btnK=Google%20%E6%A4%9C%E7%B4%A2

解説

  • cheerio-httpcliによるページ遷移はPromiseを返すので、thenで結果を受け取ることができる
  • resultには、レスポンスオブジェクトのresponse、ボディ全文のbody、ボディに対してjQueryライクに操作できる$オブジェクトが含まれている
  • responseには、元のリクエストオブジェクトであるrequestが含まれてる
  • あとはリクエストオブジェクトからURLを抜き出すだけ

だいぶまどろっこしいことをしてる気がする。

3年目プログラマが参考にしたQiita記事まとめ⑪

概要

特にカテゴリもレベルも偏らずにざっくばらんに、参考になったQiita記事を一言添えて列挙するシリーズ11本目

Qiitaまとめシリーズ

PHPでメタプログラミング

これもメタプログラミングと言えばメタプログラミングなのかな。Rubyでメタプログラミングするよりも可読性が限定されるのと、「この言語はメタプログラミングできる」って言う認識がRubyにはあってもPHPにはあまりないから、業務で使うのはあんまり好ましくないかも。記事の例の場合は設計をどうにかすればもう少しまともにできるケースなのでは。

技術師匠の皆様の教えを記録する

師が何名かいる時点で相当恵まれてると思うけど、師が居ない以上こういった教えを又聞きして自分のものにするしか無い。
「コマンドを使ったらその前後で何が変わるかを理解する」これはほんとに大事にしたい。よほど急いでない限りコピペコマンダーは辞めて全て理解ししたいね。

ウェブアプリをソースごとパクる業者に対する対策

HTML/CSSのデザインならわかるけど、ウェブアプリのロジカルな部分をコピペするってある・・・?なかなかに難しいことだと思うけど、その対応がなかなかエグい。ここまでする必要あるのかな。読み物としてはかなり面白かったけど。

Vimのカーソル移動が遅い時にやった事

何かカーソル移動が重いなと思ったらカーソル行表示機能が原因だった。シンプルな機能なのにこんな重くなるとは驚き。カーソルライン地味に便利だったけど、必須でもないからオフにした。

新人エンジニアとのジェネレーションギャップ

面白いけど「おっさん」というよりは技術の進歩についていけない人では。この辺の技術を生み出して広めたのも「おっさん」なわけだし。あと新人エンジニアでこれ全部知ってたらそれはそれで恐ろしい。

-今話題の記事を読んで気になった- 「WebP画像形式」とは??

へぇー。将来的にjoeg,png,gifに次ぐ圧縮形式になり得るのかな。またGoogle産かって感じ。現状Chromeでしか動かないとなると即戦力ではないけど、追っておいたほうがいいかも。

デフォルト値か、デフォルト式か、それが問題だ。

こう言うのがあるから、誤解も生まれるしデフォルト引数でリテラル以外を記述するのは止めよう。空配列で初期化したいならメソッド内でしよう。というか主要言語でデフォルト値を採用してるのはPythonだけか。なおさら使いづらいな。

開発未経験者がWEBエンジニアを目指す-1

Web系って敷居が低い風潮あるけど実際かなり高いよなぁ。フロントとサーバわけてやらなきゃだしデザインもあるしビルド環境まともに作らないと辛いし技術の流れ早いしIEはアレだし。コマンドラインツールとかの方が最初に学ぶ範囲狭いし、実行環境も手軽だし敷居低いと思うんだけど、戦犯あの黒い画面か。

【JavaScript】varとfunction”文”は使わずにletとconstを使って欲しい(切実)

「切実」とか言われても、ES6が使えない開発だってあるんです。と思ったけど、letとかconstとか、アロー関数辺りは最早どのブラウザでも普通に動く?アロー関数はsafariで動かなかった記憶があるなぁ。

こんな会員制システムにはユーザー登録したくない(ID・パスワードの扱い/入力画面)

いやほんとに「わかる〜」って感じの項目ばかり。昔ならいざしらず、現代のWebサービスでこういう会員登録フォームがあると、

  • 運営者がIT投資してない
  • 運営者がITに理解がない
  • 開発者の技術力が無い
  • 運営者/開発者にセンスが無い

の一つ以上に当てはまるんだろうと思って、フォーム以外のシステム全体含めてお粗末なんだろうなと思っちゃう。自分がそう思うってことは他にも同じことを考えてる人がたくさん居るんだろうから、自分が作る時にはこうならないように気をつけよう。

[vagrant] ssh_exchange_identification: Connection closed by remote host

いつも通り立ち上がっているvagrantマシンにsshで接続しようとしたら以下のエラーが出た。

$ vagrant ssh
ssh_exchange_identification: Connection closed by remote host

ググってみても心当たりあるような内容はない。

VMを再起動してみよう

$ vagrant halt; vagrant up; vagrant ssh

繋がった。

Last login: Wed Dec 27 10:27:39 2017 from 10.0.2.2
vagrant$

よくわからない問題は再起動で大概解決する。
本当はちゃんと理解して解決したいけど、取り急ぎ業務を続行するためにこれで済ます。

「Effective Ruby」レビュー

書籍について

タイトル Effective Ruby
著者 Peter J.Jones (著),‎ 長尾 高弘(翻訳)
発行日 2015/01/08
ページ数 320ページ
価格 3456円
Amazon https://www.amazon.co.jp/dp/B00SF6JN4K/

概要

本書はRubyの入門書では無く、一歩進んだRubyの活用方法48種がまとまった一冊。

といっても、上級者向けの内容ではなく、Rubyの入門書を一冊終えて、日常的にRubyを使い始めた人が「もう少しRubyを使いこなしたいな」と思った時に読むべき内容。

第1章 Rubyに体を慣らす

第1章ながら、読者がRubyの深い世界への第一歩を踏み出すためのノウハウが少ないページにふんだんに詰まっている。

「Rubyは何が真で何が偽か?」「Rubyのオブジェクトはnilである可能性がある(NULL安全でない)」「定数が定数でない」「Perlの名残を持っている」といった、Rubyならではの概念に関して大雑把に触れている。Rubyを突き詰めたい人にとって、Rubyが他の言語と違いどんな風味を持っているのかを第1章で感じ取ることができる。この章で「Rubyってやっぱり面白いな」と思った人こそ、そのまま第2章、第3章と進んで欲しい。

第2章 クラス、オブジェクト、モジュール

言うまでもなくRubyはオブジェクト指向言語だが、その仕組は他の言語とは大きく異る。継承階層をどのように組み立てているのかを理解した上で、どういったクラス、オブジェクト、モジュールの使い方をするのがベストか、そのノウハウが詰まっている。

第3章 コレクション

Rubyにおけるコレクション(Array,Hash)は、Rubyで開発を行う上では必須といえる構成要素だが、Rubyはそれを支援する様々な機能を持っている。第3章では具体的なコレクションの使い方のTipsが多く含まれ、ここまでで最も即活用できる内容になっている。なんならこの章だけを読んでも得られるものが大きいとも言える。

第4章 例外

Rubyの例外処理の関して。個人的には少々物足りない、基本的な例外の使い方に関してだった。

第5章 メタプログラミング

著者が最も力を入れているのはこの章ではないかと読んでてひしひし感じた。

Rubyは全てがオブジェクトであるという、Rubyの最大の特徴をご存知だろう。では全てがオブジェクトとはどういうことか。それは後から自在に書き換えられるということで、それはメタプログラミングにこれ以上になく適した言語ということだ。本性ではメタプログラミングの基本的な内容が丁寧にかかれている。この章を読んでRubyのメタプログラミングに興味を持ったら、それだけで一冊になっている書籍が幾つかあるのでそちらに手を出してみるとよい。

第6章 テスティング

本書ではテスティングにMiniTestを用いている。テストに関してはざっくりと触れられているだけで、具体的なテスト手法を身に着けたい人には少々物足りない。というかMiniTestよりRSpecを使いたい。

第7章 ツールとライブラリ

主にirbとbundlerについて。正直irbよりpryを使ったほうが遥かに捗るので、これを読んで実践するよりはpryを導入した方が良いと思った。bundlerの使い方はかなり丁寧に書かれている。大規模開発を行う上では必須の依存管理のノウハウが詰まっているので、必要に応じて読むと良い。

第8章 メモリ管理とパフォーマンス

最終章にしてかなりコアな内容に。Rubyではガーベジコレクタがどのように動いているのか、それを知った上でどのようにコーディングすればメモリを節約できるのかについて書かれている。また、パフォーマンスを向上させるためのコーディングテクニックについても振れられているが、これはおまけ程度だ。

総評

Ruby歴2年ほどの私が読むのにかなり適していると感じた。メタプログラミングの章と、メモリ管理の章は少し難しく、流し読みになってしまったが、それ以外の章は得られるものがかなり多かった。

全部読もう、全部理解しようと気を張らずに、RubyのTipsを得たいなぐらいの気持ちで読んでみると意外な発見が得られて良いと思う。

3年目プログラマが参考にしたQiita記事まとめ⑩

概要

特にカテゴリもレベルも偏らずにざっくばらんに、参考になったQiita記事を一言添えて列挙するシリーズ10本目

Qiitaまとめシリーズ

Haskellの入門から中級者になるまでの指針

既に3回、Haskellに挑戦して挫折してる。(挫折と言うか面倒になって投げ出してる) 関数プログラミングの感覚を身に着けて、副作用のない良いコードを書くためにはHaskellを使うことが近道になることはわかってるんだけど、どうにも純粋関数型言語というのは数学的センスが求められて入門レベルでもついていけなくなる。個人的には今のところ最も難しいプログラミング言語だと思うんだけど、そもそもHaskellや純粋関数型言語に対して誤解してて勝手に敷居上げてるのかも。来年こそ本気出す。

【便乗記事】エンジニアがデスマーチを生き抜くための知見をまとめてみた 

まだデスマーチ的なことは行ったこと無いし、もし今後巻き込まれたとしても全ての非難を受け入れつつ緩やかに逃げるつもりでいるから関係ないと思うけど、一応こんな記事があったことは頭の片隅に入れておこう。食事についての記述がガチ過ぎてちょっと笑えた。当事者にとっては笑えないと思うけど。

(ほぼ)世界中の宅配便業者の配達状況を知ることができるAPI

面白そうだったので早速使ってみた。が、使ってみると個人的にはそんなに使う理由がないことに気づいた。よほどじゃない限り配送情報とか気にしないしね。

JavaScriptのシングルクォーテーションとダブルクォーテーション

JSに限らず、RubyでもPHPでも、どっちを使ってもいい状況ならシングルクォーテーションを使う。好みの問題と周りに合わせるかの問題だけど何かシングルクォーテーションのほうがスッキリして見えるし。

VagrantとDockerについて名前しか知らなかったので試した

こういう記事を読むたびに、自分の開発環境としてのDockerの使い方が一般的なのか怪しくなる。全然プロセス実行ツールとしてのDocker利用ができてないからなぁ。まずDockerFileをまともに書いたこともないし、Docker-Composerなんかも全然使ってないから来年はその辺りのノウハウを強化したい。

ここがすごいぞ! stylelint!

eslintのCSS版。eslintは沢山の人が使ってるけどこれはあんまり見ないな。webpackに自然に組み込めるのと、scssもちゃんと対応するのであれば使ったほうが良さそう?

初心者向け、「上手い」シェルスクリプトの書き方メモ

こういうTips記事を定期的に読んで勉強した気になっても、いざシェルスクリプトを書くときは殆ど使わない。多分日頃からシェルスクリプトを書く習慣がないから身につかないんだろうなぁ。最近はDevOpsなんかもあってRubyとかで構成情報記述できるからなおさらシェルスクリプトを書く機会が減ってる気がする。

のび太と学ぶ「機械学習」~FX予測プログラムを作成~【第1話】if文作戦

面白いしわかりやすい。何よりのぶ代ドラが脳内再生される。この記事は某タヌキアニメとは関係ないけど。

Seleniumしくじり先生 〜E2Eテストの導入で失敗した話〜

Seleniumに限らずE2Eテスト全般あるある。特に最近のリッチクライアントなWebサービスだとE2Eはほんと難しい。フロントフレームワークを使うのであればそれ専用のE2Eテストモジュール使わないとまともにできなそう。

週末在宅ワークの生産性を上げる4つの視点と17の工夫

少し古いITエンジニアの勉強時間の時間の調査[1]によると、大半が週に3時間未満というデータがありますが、プログラミング能力を競うサイトの調査[2]では、11%の人が週20時間以上勉強や個人の開発に費やしているようです。

競技プログラミング勢の平均を参考にするのはアレだけど20時間やってるかと言われると微妙だなぁ。平日平均1.5時間ぐらいで休日平均5時間、累計で17.5時間ぐらいだと思う。休日にもう少し避ければ良いんだけど、無駄に長時間寝たり頻繁にカラオケに行ったりしててロスが多いので見直したい。特に惰眠貪るのを。

時間確保のためには、他のことをしていた時間を削らなければなりません。自分の生活の中で、無駄なもの、なくしてもよいものをリストアップして、ひとつずつなくしていきましょう。
まず休日の惰眠。あとは毎日の通勤時間往復3時間弱かなぁ。もう少し上手く時間使えるといいんだけど、ついつい漫画読んだりしてる日が多い。

ブログの記事などを書いている際に、統計などを調べ始めると徹底的に調べたくなりますが、結局は最終的な記事に関係ないことが多いため、一定のレベ
ルでさっさと切り上げたほうがよいでしょう。
うっ、頭がっ!

スキマ時間のための考え事リスト、作業中断と再開を早くするToDoリストを書き出しておく

これちょっと前に数日ぐらい手書きメモで実行してたけど何か面倒になって三日坊主になっちゃったな。タスクの粒度が余りに小さすぎたのかも。(ex: ペットに餌上げる、風呂掃除する)

週に1日は休む

多分週2,3日は休んでる(作業時間が0)

ある研究によると、困難な問題に本腰を入れてしばらく取り組み、生産性の低下やストレスの低下を感じ始めた後に、切り替えて休憩をしてリラックスをすると、創造的なアイディアや問題解決の方法がひらめく「ブレークアウト」(ゾーン)の状態になる[10]そうです。

これ仕事でも趣味でもほんとによくある。大事。

机・場所を変える

最近はスタバとかマックとかで開発する頻度が増えてきたけど、確かに捗る。家でやるよりずっと捗る。でもだからって毎日そうしたら今度は家のほうが捗るってなってくると思われるのでバランス大事に。

普段大きなサブディスプレイにつないで仕事をするのに慣れていると、機動性に欠けるため、サブディスプレイに頼らなくてもノートPCだけで仕事が進められるようなテクニックを身に着けておくとよいでしょう。なお、開発やデザインの際は大きなディスプレイがあった方が便利なことが多いですが、モニターを増やしすぎると集中力が削がれるという記事もあります[11]。いずれにしろ道具に振り回されない程度の慣れは必要でしょう。

最近これに気づいて仕事中は外部モニタ使う頻度減らした。画面切り替えのテクニックに慣れると普通にMacBook1台でも捗る。

[Laravel] JWTAuthの導入で詰まったポイント整理

概要

Laravel(とLumen)にJSONによる認証の仕組みを簡易的に導入するためのライブラリである、JWTAuth(tymondesigns/jwt-auth)を導入した際に以下のエラーに詰まったのでその解決方法の備忘録

$ php artisan jwt:generate

In BoundMethod.php line 135:

  Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist

前提

以下環境で動作確認

debian 8.6
PHP 7.0
Laravel 5.5
composer 1.2.0

問題点

Laravel 5.4 と Vue.js 2.2 と JWTAuth で、ログインできる SPA アプリケーションのチュートリアル その4 – Qiita に沿って、Laravel + Vue + JWTAuthで、SPAによるログイン機能を実装しようとしていた所、jwt:generateを実行する所で以下のエラーが発生した。

$ php artisan jwt:generate

In BoundMethod.php line 135:

  Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist

比較的新しい情報の通りに進めて躓くと辛いなと思いながら、頑張って原因を調べて解決した。

解決方法

バージョン互換性問題かはハッキリわからなかったが、このエラーが出る問題は、新しい開発版のtymon/jwt-authパッケージで解決されている。よって、以下のコマンドで開発版をインストールする。

composer require tymon/jwt-auth:dev-develop --prefer-source

バージョンアップに伴い、サービスプロバイダの設定も書き換える必要がある。config/app.phpの該当箇所を以下のように書き換える。

変更前

'providers' => [
    ....
    Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class
],

変更後

'providers' => [
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class
],

最後に、認証用の秘密鍵も更新する。

php artisan jwt:secret

これで後はLaravel 5.4 と Vue.js 2.2 と JWTAuth で、ログインできる SPA アプリケーションのチュートリアル その4 – Qiitaの通りに実装を進めることができた。

備考

ライブラリの安定版でなく開発版を使うのはいささか気が引ける。安定版のままでも動かせる解決策があったら乗り換えたい。

参考