正規表現を覚えよう。

 

SublimeTextでよく使う正規表現。とっても便利。
「 SublimeText 」と「 正規表現 」でどんだけ早くデータ整形できることか!

だけど、正規表現まだ検索しちゃってる。。。
「あ、そうだ覚えよう。」

というか、その前に全然まだ正規表現わかってなかったので、
ドットインストール受講しました^^

とりあげること

・「+」 VS 「*」
・「\d」 VS 「[0-9]」
・「\b」
・いろんな「?」
・文字クラスと「|」(選択子)
・いろんな「改行」
・キャプチャをつかっての置換

 

「+」 VS 「*」

どっちっけ?ってなるので^^;
・「+」 …1回以上の繰り返し。 ={1,}
・「*」 …0回以上の繰り返し。 ={0,}

以下のようなデータがあって、「a0001」「bcdef」「00002」の両方を検索にヒットさせたい時。

a0001
bcdef
00002

「+」のみを使った以下のパターンだと「a0001」しかヒットしません。

[a-z]+[0-9]+

 

しかし、

 

「*」のみを使った以下のパターンだと
「a0001」「bcdef」「00002」の全てがヒットします。

[a-z]*[0-9]*

 

さらに

「a0001」「bcdef」だけヒットさせたいとき

[a-z]+[0-9]*

「a0001」「00002」だけヒットさせたいとき

([a-z]|[0-9])*[0-9]$

「bcdef」「00002」だけヒットさせたいとき

^([a-z]*|[0-9]*)$

 

「\d」 VS 「[0-9]」

ドットインストールを見るまでしらなかったんですが、「\d」っていうのがあるんでうすね。「[0-9]」派でした。

さらに否定形の書き方がそれぞれ違ったので発見でした。

「\d」の否定形→「\D」

「[0-9]」の否定形→「[^0-9]」
※ 「^」は「 [」の直後のみ否定を表す。「^[0-9]」だと行の先頭が数字のものが該当する。

 

「\b」

単語の境界…単語のみをマッチさせたい時つかう

例えば、「curry」のみをヒットさせたい時、
「curry」だと全ての単語のcurryにヒットしてしまうので、
「\bcurry\b」とすると一番上の「curry」のみにヒットさせることができます。

curry
curryrice
currypan

 

いろんな「?」

「?」って2つの役割があります。
・「?」 → 1回の繰り返し。 ={0,1}
・最も短い文字でマッチさせる

「”.+”」 → 最も長い文字にマッチしてしまう(通常)のため、「”apple”, “apples”, “pineapple”」の全てがヒットする。
「”.+?”」 → 最も短い文字でマッチする。「”apple”」「 “apples”」「”pineapple”」のそれぞれがヒットする。

"apple", "apples", "pineapple"

 

いろんな「改行」

「\r\n」→ 改行(Windows)
「\r」→ 改行(v9までのmacOS)
「\n」→ 改行(v10からのmacOS)
「\r\n|\r|\n」→ 改行(すべて)

キャプチャをつかっての置換

「()」で囲った部分「$n」に格納し、それを使って、置換ができる。

phpのpreg_matchでも使えた!
以下のようなデータがあって、「id={id},name={name}」みたいな形式に変換したいときとかに使えます。
sublimeでは shift + command + F で検索&置換の機能を使います。
Find: (.+),\s?(.+)
Replace: id=$1,name=$2

置換前

1, taro
2, jiro
3, saburo

置換後

id=1,name=taro
id=2,name=jiro
id=3,name=saburo

 

phpのpreg_replaceだと、こんな感じ。

preg_replace("/(.+),\s?(.+)/", 'id=$1,name=$2', "1, taro")

 

いろんな正規表現がありますね。

組み合わせ次第だでやり方無限大ですね。おもしろーい。

 

PHPカンファレンス関西へ初参戦!

どうも!PHPカンファレンス関西に行ってきました!

関西のPHPカンファレンスは初めて参加しました。福岡しかいったことのない身です。
しかし、3連休のOsaka暑すぎでした。
3日目の泊まった友達の家はクーラー無いし、
たまたま行った焼肉屋は屋内なのにサウナ状態、
宮崎に帰って行ったcoldrainのライブも冷房壊れてる熱いライブで、
大阪のPHPer熱を感じました。

#前夜祭

前日入りしたので、前夜祭【非公式】も行ってきました。
PHPカンファレンス関西の前夜祭の会場
飛行機の都合で、LTしか見れてないんですがw
入口が8時に閉まるということで、わざわざロックオンのおえらい方に開けてもらいました、ありがとうございました。
ロックオンさんのオフィスが少し見れて光栄でした!!!
DB周りのお話が多かった気がします。
オニオンアーキテクチャは初耳でした。
非同期PHPやったことない。。。curl_multi?コルーチン?って感じだったので自分なりに調べて見ました。

非同期PHP

jsでしかやったことない。。。
ReactPHP、流行りのswooleできるそうです!今度触ろう。(多分

こんな方法でも非同期実行できまうす!

    • curl_multi
    • コルーチン ←swooleはこれおしだそうで。

↑一旦処理を中断した後、続きから処理を再開できる。スケジューリングできる!

 

 

#本編

まず、まとめ\(^^)/

  • グランフロント大阪でっかい、参加者いっぱい!
  • 人気のセッションは立ち見もできなかったりしてた
  • ガラポン楽しかった!ホワイトボードノート欲しかった。。。
  • インターフェイス使ってみよう
  • SOLIDの原則、条件分岐禁止ギブスの想像
  • PhpStorm使いこなし隊。ハンズオンぽちりました。
  • HerokuのロンTいただいたー

AWSを背景に記念ん撮影 いただきもの いただきもの2

インターフェイス入門

インターフェイス使って実装してみよう。んでブログ書こう。
とりあえず下書き登録しました\(^^)/
インターフェイス入門のメモ1 インターフェイス入門のメモ2

SOLIDの原則、条件分岐禁止ギブスの想像

後藤さんのSOLIDの原則シリーズのトークは3シリーズすべてを生で
聞くことができました!
\条件分岐ギブスがグッズ化されることを待ち望んでいます!/
せっかくメルカリさんにノートをもらったので、使わせていただきました。
solidの原則メモ1 solidの原則メモ2

PhpStorm使いこなし隊。ハンズオンぽちりました。

OsakaからMiyazakiに帰ってきたら届いてましたー!日本語化にたよらずとも英語読めるように頑張ります・・・。
intelijハンズオン

HerokuのロンTいただいたー

Herokuは個人的なやつで使ってます。これとか
https://today-saying.herokuapp.com/
herokuも英語ばっかで探り探りですが、便利なのでどんどん使います〜

SublimeTextでよく使うショトカットキー集

 

参考:https://qiita.com/seafield1979/items/56d4833dae818dcf85ae

SublimeTextは便利です!(PhpStorm・Atomも勿論いいけど)
たまに忘れるのでメモ程度によく使うコマンドを書き溜めますう。

Macです!

● いろいろ

コマンドパレットを開く Cmd + Shift +「P」
拡大 Cmd + Shift + 「+」
縮小 Cmd + 「-」

● 編集

履歴から貼り付け Cmd + 「K」,「V」
現在行を複製(下の行に挿入される) Cmd + Shift + 「D」
行の削除 Ctrl + K
コメントアウト Cmd + /
範囲コメントアウト Cmd + Shift + /

● ファイル

フォイルを開く(ファイル名検索できる) Cmd + 「P」
新しいタブを開く Cmd + 「N」
ファイルを閉じる Cmd + 「W」
次(右)のタブに移動 Cmd + Opt + 「→」
次(右)のタブに移動 Cmd + Opt + 「←」

● ウィンドウの分割

2 行に Cmd + Opt + 2
2 列に Shift + Cmd + Opt + 2
4 グリッドに Cmd + Opt + 5

今年もPHPカンファレンス福岡2018行って来たよ^^

先週、PHPカンファレンス福岡2018に行って来ました!
去年も行ったんですが、あいかわらず楽しかったです。

公式サイト:https://phpcon.fukuoka.jp/2018/

カンファレンス後の気持ち

  • 英語の文でも逃げずに読む
  • 日本語の文あればなお、ありがたくしっかり読む
  • PSRおさらいしよう
  • ログ使おう
  • 自動化したい
  • Golangが熱いらしい
  • もっと勉強しよう

全然野菜・前夜祭

前乗りしたので、全然野菜と前夜祭にも参加してきました。
全然野菜の開催場所がさくらインターネットさん、前夜祭がLINE fukuokaさんでした。
他社のオフィスを見学できるのもいいですよね。面白いです。
LINE fukuokaさんでは、テーマパーク状態で超興奮しました。
カフェスペース的なところで3セッション同時で進行しており、
私は真ん中で全部見ようと欲張っていましたが、無理でした。。。
同世代女性エンジニアとも知り合えていい機会でした\(^^)/

本編

会場は去年と同じく、FFTホールでした。
去年も見たことある人がいっぱいいてなんか安心しました。
メルカリのトートバックもいただけたし、
愛用PHPStormのJetBrainsのヨーヨーも狙ってたので、やっとGETできて大満足でした!

 

私的に面白かったのが

です。

社内ナレッジを全部署統一してて、内容はなんでもokってカオスかなと思ったんですが、めちゃくちゃいいなって思いました。

私は生活レベルが低いので、管理とか人事の方からお金の話とかあったら見たいし、役立ちそうだなって思います。

技術の話だけではなくて、他社の業務効率化の話を聞くのって面白いなって思いました。

 

実行委員の皆様、お疲れ様でした。
今年も開催していただき、本当にありがとうございました!

 

ところで、もちろん

\PHPカンファレンス関西2018行きます!/

https://2018.kphpug.jp/

 

 

/細かいことは下記リンクにまとめました。よかったらみてください。\

https://kin29.github.io/PHPerMemo/

Googleアナリティクスでアクセス解析をしたい〜分析編〜

 

\うた紹介コーナー、第二弾/

You/雨のパレード

雨のパレードは半年前くらいにライブにいって、そこから大好きです。
色んな音がしてて、ライブ全体が1つの曲みたいで感動したのを覚えてます。
久々にCD買ったバンドです。

 

どーも! 待望のw
Googleアナリティクスでアクセス解析をしたい〜導入編〜の続編です!

 

導入編のまとめでも書いたんですが、Googleアナリティクスが見れると、

Googleアナリティクスを毎朝見るのが日課になる。成長記録みたいで楽しい。

見える化ってすばらしい^^モチベーションあがる。

って痛感します。

 

そこで、こんな見方もありますってのを書きます。

※マーケティングとか何?って感じなのでご了承ください。

 

参照元を知る

サイトの参照元(どこからきたのか)とかわかると、

結構集客のヒントがあるのかなっと思ってます。

わたしの今年の参照元はこんな感じです。

 

Googleアナリティクス > 集客 > 参照元 / メディア

Googleアナリティクス_参照元

 

わかること

・オーガニック検索が多い(Google, Yahoo, bing)

・t.co / referral → ツイッターらしい。

・fd-studio.jp さんが参照してくれている!

調べてみると、、、ここで使ってくれていました!ありがとうございます!(感動っ)

phperkaigi.jp さんの「ブログ書いたよ」投稿したので、そこからの参照と思われる。ありがとうございます。

phpcon.fukuoka.jp さんに去年書いたよリンク貼ってもらったので、そこからの参照と思われる。ありがとうございます。

 

検索ワードを知る

なんて検索したら、私のサイト表示されるんだろう?何位だろう?ってのがわかります。

Googleアナリティクス > 集客 > Search Console > 検索クエリ

Googleアナリテクス_検索クエリ

 

わかること

・「solidの原則」が多め、唯一クリックされてる。

・ほとんどが表示回数が少ないのもあり、クリック全然されてないw

・平均掲載順位高いものもあるのに、表示回数がない

→そもそもあまり検索ワードとして検索されないものにヒットしてる可能性がある・・・。

 

 

こうやってみると、サイトの汚点が見えてきますね・・・。

どうにか改善して、流入増やしたいです!

 

 

ただ、BEAR.Sundayで紹介されてからユーザー・セッション数増えてます。

嬉しいのと感謝です。\(^^)/

 

 

この本を読んでから、いろいろやってみてます。

number_format に小数点以下がある値を渡すのは危ない時がある。

 

\ヘビロテな曲紹介コーナー、はじめました。/

最近、今更ながらこの歌にはまってます。
メリールー/SIX LOUNGE
このギター弾きたくて、耳コピしようとしてるけど、全く進まんです。

 

Googleアナリティクスについてではないです、はい。
次に書きますw
今日はPHPの関数number_formatが怖いことに気づいたので書いておきます。

php.netより:number_format

 

「金額表示で千円以上の時、見やすくしてくれるんだー」って、
この関数をね、小数点発生する値でつかってたんですね、第一引数だけで・・・・
こんな感じ(下)

<?php 

$number1 = 1000.499999; 
echo(number_format($number1));   //1,000

echo("\n");

$number2 = 1000.500000;
echo(number_format($number2));   //1,001

 

( ^ω^ )え、小数点第一位で四捨五入しちゃってるやん。

(なんも指定してないのに)そんなこと求めてないよ。

 

ってなりました。

第二引数を指定しないと、デフォルトの0(=小数点以下の桁数が0)とみなされ、

小数点第一位で四捨五入しちゃいます。

 

てことで、第二引数で、小数点以下が何桁か指定すればいいんだ!

って思ったけど、そんなの予想できない時が大半だと思います・・・。

 

だから、小数点以下が発生しうる値にnumber_format使うときは一旦考えましょう。

小数点以下の桁数が、固定のときは第二引数をきちんと指定すれば、想定通りになるかと思います。

 

 

Googleアナリティクスでアクセス解析をしたい〜導入編〜

 

この前、初めて友達の結婚式にいきました。感動しましたー。
最近の結婚式ってプロジェクションマッピングとかするんですね、時代の進化を感じました。

 

さて、本題です。
私は仕事で、Googleアナリティクスタグや、Googleタグマネージャーを調整して設置をすることはよくあるのですが、
Googleアナリティクスの画面(グラフとかあるやつ)を使ったことも見たこともないのです。

 

そこで!

このブログとこの前作った名言API使用例のサイトに
Googleアナリティクスタグ(正確に言うとGoogleタグマネージャ)を設置してみました!
その結果わかったこととかを書きます。

わかったこと(まとめ)

●Googleアナリティクスにある グローバル サイトタグ(gtag.js)と Google タグマネージャ(コンテナスニペット)は違う!

→Googleタグマネのが便利でプレビューとかもできて親切な感じ。
今回はタグマネ使う方法を書きます。

●Googleアナリティクスを毎朝見るのが日課になる。成長記録みたいで楽しい。見える化ってすばらしい^^

次回、分析した結果わかったこと書きます。今回は導入編!

 

導入手順

①トラッキングID取得

②Google タグマネージャタグ取得

③タグの設定

④プレビュー →  公開

⑤フィルター設定

 

①トラッキングID取得

UA-XXXXX-Xっていうやつです。←webサイトごとに振り当てられる一意のID。

Googleアナリティクス>管理>トラッキングコード から取得できます。

あとで使います。アナリティクス⇄タグマネを連携させるために使います。

②Google タグマネージャタグ取得

<script>は<head>内に、<noscript>は<body>直後にはる。GTM-XXXXがはいってるやつ。コンテナスニペットともいうらしい。

Googleタグマネージャ>管理>Google タグマネージャをインストール から取得できます。

 

③タグの設定

Googleタグマネージャ>新しいタグを追加>タグ設定 にて

トラッキングタイプ「ページビュー」とし、

Google アナリティクス設定「新しい変数」より、①でゲットしたトラッキングIDをいれて登録すると、アナリティクス⇄タグマネの連携できます!

トリガー「All Pages」とすると、サイト内のすべてのページのアクセスを追跡できます。

タグに名前をつけておくと便利です。

 

④プレビュー →  公開

③より、タグを保存すると、Googleタグマネージャのヘッダーに

ワークスペースでの変更数: 1」みたいな感じででるので、

その変更を確認したいのであれば、隣の「プレビュー」ボタンを押して、自分のサイトを見てみてください。

こんな感じで、検証ツールみたいなのが出てきてると思います。

Tags Fired On This Page が今発火してるタグです。ここに③でつくったタグがあれば大成功です!公開を押せば、公開されます。

Googleタグマネージャのプレビューモード

 

⑤フィルター設定

自分で閲覧した時に集計されては、正確な分析ができないので

IPでフィルターを設定します。

Googleアナリティクス>管理>すべてのフィルター より追加できます。

最後に…

今回のGoogleアナリティクス導入にあたって、読んだ本がこれです。

タグ設置したことあるけど、その先の分析の方法やどう役に立ってるのかがわからない技術系の私にとってはいい本でした!読みやすいです。

BEAR.SundayでAPIを作ってみた。

 

ども!最近、久々の一人暮らしになった私です。自由ですね。

前回の記事でクイックスタートをやってみたBEAR.Sundayですが、
APIが簡単に作れるということで、なんか使えるAPI作りたいなと考えました。

 

\名言APIを作りました。/

https://today-saying.herokuapp.com/

名言チョイスはわたし好みです。リロードしたらランダムにでます。
偉人のお言葉ってなんか元気でます!元気ない人は是非みてください!!

(攻撃はやめてくださいねw)

〜こんなやーつ〜
・名言を登録できる(INSERT)
・名言を削除できる(DELETE)
・名言をランダムに返す(RANDOM)
・名言一覧を返す(SHOW)

〜使ったもの〜
・PHP
・BEAR.Sunday
・SQLite3
・heroku

 

ソースはこちら。herokuでデプロイするために、調整してます。
https://github.com/kin29/bear-work

 

API:https://today-saying-sqlite.herokuapp.com/?mode=show

 

 

これ作るにあたって、わかったこととか後々書こうと思いますー

とりあえず、披露したかっただけです^^

 

SublimeTextで愛用している機能

 

わたし自身、コード書く時はPHPStomeを使ってるんですが、

メモやCSV整形、CSV/TSV→SQL文とかマークダウン形式に変更するときはSublimeTextをめちゃくちゃ使ってます。

超便利なものがあるんです。ご存知かもしれませんが教えちゃいます。

 

 

DataConverter

たとえばこんなtsv形式のデータがあります。

id title body
1 top トップですよ。
2 detail 詳細ですよ。

↑のSQL文を作る時、まあまあだるいですよね。タイポとかもしたくないし…。

 

\それがなんとSublimeなら一瞬でつくってくれるんです!!!/

 

■事前準備

・DataConverterをInstall Packageしておく。

 

■手順

(1) tsv形式データを開いたタブ上で Ctrl + option + P

(2)「DataConverter: to PosgresSQL」を選択

(※MySQL/SQLite/JSON/CSV/PHP等もあります!)

(3)できあがり。以下のsql文に変換されます。

 

CREATE TABLE IF NOT EXISTS DataConverter (
	id serial,
	id integer,
	title text,
	body text
);
INSERT INTO DataConverter
	(id, title, body)
VALUES
	(1, 'top', 'トップですよ。'),
	(2, 'detail', '詳細ですよ。');

「DataConverter」の部分はテーブル名に合わせて変更し、

id定義は適宜どっちかだけにしてもらえば、もう完成ですね。

(IF NOT EXISTSも必要なければ削除しちゃいましょう。)

 

 

もう一個、最近使ってる機能があります。

Sublimerge

という差分を見る機能。
これはEditerなら大概ある機能なんですが、csvをSublimeで見るのでバックアップファイルとの差分みるときに使っています。

 

■事前準備

・SublimergeをInstall Packageしておく。

 

■手順

(1) 比較対象A,Bのファイルをタブで開いておく

(2)比較対象A(またはB)の上でCtrl + option + P

(3)「Sublimerge: Compare to View…」を選択

(3)現在開いているタブのファイル名がプルダウンが出てくるので比較対象B(またはA)を選択する

(4)差分が出てきます。

MySQLとPostgreSQLのコマンド比較してみる。

前回記事で、コメントの比較しましたが、

これ→ MySQLとPostgreSQLのコメントの書き方のちがい

その実験してたときに、MySQL・PostgreSQLそれぞれのコマンド使ってたんですが、

なかなか違ってて使い分けムズってなったので、メモ用にとのことで書きまーす。

 

参考:

https://qiita.com/aosho235/items/c657e2fcd15fa0647471

https://qiita.com/tamano/items/be43de7bb733ad38362c

 

 

■接続

MySQL
ポイント → 「 -p 」を忘れがち。

mysql -u [ユーザ名] -p
Enter password: 

 

PostgreSQL

psql -U [ユーザ名]
Password for user [ユーザ名]: 

 

 

■データベース一覧をみる

MySQL

[ユーザ名]> show databases;
+--------------------+
| Database           |
+--------------------+
| db_name1           |
| db_name2           |
+--------------------+
3 rows in set (0.00 sec)

postgreSQL

[ユーザ名]=# \l
                                    List of databases
        Name         |    Owner     | Encoding | Collate | Ctype |   Access privileges   
---------------------+--------------+----------+---------+-------+-----------------------
db_name1             | table_user   | UTF8     | C       | C     | 

 

 

■データベースの切り替え

MySQL

[ユーザ名]> \u test_db
Database changed

postgreSQL

[ユーザ名]=# \c test_db
You are now connected to database "test_db" as user "[ユーザ名]".
test_db=# 

 

■テーブル一覧をみる

MySQL

[ユーザ名]> show tables;

postgreSQL

[ユーザ名]=# \d

 

■テーブル定義を確認

MySQL

[ユーザ名]> DESC test_table;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| title | varchar(255) | YES  |     | NULL    |                |
| body  | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

postgreSQL

[ユーザ名]=#\d test_table
                         Table "public.test_table"
 Column |  Type   |                        Modifiers                        
--------+---------+---------------------------------------------------------
 id     | integer | not null default nextval('test_table_id_seq'::regclass)
 title  | text    | 
 body   | text    | 

 

 

■SQLダンプ出力

MySQL

su - [ユーザ名]
mysqldump -p [データベース名] [テーブル名] > [ファイル名].sql

PostgreSQL

su - [ユーザ名]
pg_dump (-t [テーブル名]) [データベース名] > [ファイル名].sql

 

 

うーん地味に違う。

覚えきらんですねw