2017年 1月 の投稿一覧

【WordPress】投稿を集計するただひとつのプラグイン「Site Posts Stats」


社会人2年目エンジニアの関です。

WordPressの開発で、テーマとかプラグインを自作しているとなんだか上級者っぽい感じしませんか?かっこよくないですか?
ということで、私もかっこいい上級者に一歩でも近づきたいのでプラグインを自作してみました。

今回の制作物は以下で公開しています。
概要や画面説明などはREADME.mdを見てください。
https://github.com/hseki-luckey/site-posts-stats
続きを読む


踏み台サーバを用いてTableauに外部のMySQLサーバを接続する


こんにちは、リンクバルの佐藤です。

最近BIツールのTableauを導入し始めたのですが、Tableau単体では外部サーバーのMySQLに接続できません。

開発用DBはAWS上にあるので、接続するには踏み台サーバーを経由する必要があります。

なのでSSH ポートフォワーディング(SSHトンネルともいう)で踏み台サーバーを経由する方法を備忘録的に書いておきます。

一度踏み台にアクセスしてしまえば、あとは放置で大丈夫です。

お膳立て

以下のコマンドを打ってsshポートフォワーディングしましょう。 参考URLはこちらです。

ssh -f -N -L 10000:localhost:3306 ユーザー名@サーバーホスト名 -p 22

これでSSHポートフォワーディングが完了しました。 一応接続できているかをtelnetを使って確認しましょう。 飛ばしても問題ありませんが念のため。

telnet サーバーのホスト名 10000

10000はローカルの10000ポートを指定しています。 先ほど接続先の3306ポートにマッピングしたものと同じポートを指定しています。

Connected to localhost.とターミナルに表示されれば接続されています。 明記してませんでしたが、ここまですべてMacです。Windowsではtelnetはデフォルトでは使えないので、有効化してあげる必要があります。

さてここまでお膳立てしてあげてから、Tableauを起動します。

Tableau起動後

サーバーへMySQLといって、

  • サーバーホスト名
  • ローカルポート番号
  • ユーザー名
  • パスワード

をぽちぽちしてサインインしてください。ここまでの設定で接続できるでしょう。

設定が終わったらググってTableauを存分に使い倒してやりましょう。 Tableauの作図方法は次回書くことにします。 では。


Packerでマシンイメージを管理する

packer

リンクバル技術部の川畑です。サーバの構成管理はどこの会社でも課題になっていると思われます。このあたり構成管理ツールをつかってコードをGitHubとかで管理していきたいですね。構成管理ツールでもマシンイメージ・ミドルウェア・デプロイツールなどいくつかの階層によって適用できるツールがあると思われるのですが、今回はマシンイメージを管理する「Packer」を検証してみました。

1.Packer設定ファイル

  • json形式で記載
  • 「builder」でマシン環境を定義
  • 「provisioners」でサーバ上の動作を定義
  • ここでは「digitalocean.json」で保存

続きを読む


リンクバルの”お菓子ちゃん”のこだわり(お菓子支給制度について)~ITアレルギーな私の技術部奮闘記~


こんにちは。
リンクバルの山本(♀)です。25歳です。

リンクバルの看板商品「街コン」のイベントプランナーでしたが、ひょんな事からリンクバルのシステム系の部署である技術部に異動となり、
今はシステム開発のディレクターになるべく修行中です。
「~入門」「初心者でも分かる~」が読めないぐらいITアレルギーな私のWEB部での奮闘をお楽しみください。

皆さんは覚えているだろうか。

前回の私の記事の最後のコメント・・・

プログラミングに苦手意識を持っていた私だったけれど、ようやく第1歩を踏み出した記念のブログ。

「そして今日も、エラーと戦っている私なのです」
エラー箇所を探し、修正し、の繰り返し。
私の苦労が滲み出ている・・・ちょっと感動的な文章。

ところがつい先日、夫(ちょっとだけプログラミングできるらしい)からズバット言われたわ。

は?

確かにエラー箇所に小さな”レ点”のようなものが見える。
夫いわく、エラーがでたからって、そんなに四苦八苦する事でもないらしい。

気がつかなかった。不覚。
今までエラーを1から探していた時間を返せ!

という事で、

「そして今日も、エラーと戦っている私なのです。」改め、
「そして今日も、”レ点”しかでない私なのです。」
に変更します。はい。

ココからが本題、株式会社リンクバルの”お菓子支給”制度

全ての社会人の皆さん共通の悩み。それは仕事中の空腹。
仕事中は例えガンマGDPの数値がアレでも空腹なんて我慢してられない。そんな時・・・
リンクバル社員は動きだす。

お菓子があるこの場所へ。
中はこんな感じ。

欲しい味がここにある、それがリンクバルの”お菓子支給制度”

「あーお菓子支給ね。」と楽観視したそこのアナタ。
うちの”お菓子支給制度”を侮るべからず。
不思議と「この味が欲しい」と思ったときに、必ずここにある。
まるで私たちの心を見透かしているように。

例えばこんな感じ、ある日のお菓子事情

ある日の朝、その日は胃が元気が無くて、ちょっと軽めなものが欲しいと思ったの。
すると見て!私の心を見透かすように煎餅が。
さらに、中にサクサク系の何かが入ったチョコレートもある。
胃にやさしい組み合わせだ。

朝一でお菓子エリアに行ったのに、もう誰かが煎餅を持っていった痕跡が見える。
もうお気づきかもしれないが、社員同士で熾烈なお菓子争奪戦が勃発している・・・多分。

午後、少しお疲れぎみ。
こんな時は変り種が欲しいところ・・・と思ったら見て!

こ、これは、中にチョコレートが入ったマシュマロと、ウ〇イ棒ではないか。
中にチョコレートが入ったマシュマロは私の好物なの。
チョコの分量が極めて少ないのに、甘くて美味しいから、(多分)太らないし、満足感がある。

変り種と言えば、旅行のお土産なんかが置かれていて、
”ボーナス”菓子が支給されることもある。

お菓子ちゃんに突撃取材

このお菓子をいつもコーディネートしてくれる通称”お菓子ちゃん”を突撃取材しました。
ちょうどお菓子補充中。

山本「組み合わせの工夫は?」
お菓子ちゃん「まず煎餅とチョコレートは必須。これは代々お菓子ちゃんが受け継いでいるシキタリです。
それ以外はその時のお菓子ちゃんのセンスです。」

なるほど。色々考えながら組み合わせているのですな。

さて、今日のお菓子は

今日はお菓子から素敵なメッセージをもらったわ。
最近は新しい仕事もいただけて更に頑張ったので、誰かからやさしい言葉が欲しかったの。

ありがとう。
でもやっぱり・・・私はこっちをいただくわ。

 

”お菓子支給”のある株式会社リンクバルで
一緒に働くエンジニアを募集中です!
新しい事にチャレンジしたい、もっともっと成長したい、そんな
フロンティアスピリットをお持ちの方が生き生きと働ける会社です。
詳細はコチラ

最後まで読んでくださり、ありがとうございました。


開発者必見!Slackカスタム絵文字でコミュニケーションが楽しくなる。


リンクバル技術部エンジニアの中村です。リンクバル技術部では、Slackを活用してコミュニケーションをとることで、日々の開発業務を進めています。

関連リンク:リンクバル新規サービス開発チームにおけるSlack活用事例

リモートで働く社外の開発パートナー様とのやりとりもSlackを活用しています。

Slackが無い開発は考えられないと思う利用頻度です。

そんなSlackには、コミュニケーションが円滑になる、絵文字機能があり、Slackを使っているチームであれば利用していると思いますが、オリジナルの絵文字を追加できるのをご存知ですか?

自社で保有しているキャラクターのアイコンやアプリアイコンを、カスタム絵文字(Custom Emoji)として追加することで、コミュニケーションが楽しくなり、プロジェクトの雰囲気も良くなると思いますよ

この記事では、Slackのカスタム絵文字の登録の仕方を説明致します。

カスタム絵文字登録手順

Customize Slack

  • Slackを開き、チーム名の横の「∨」アイコンをクリック
  • 続いて、「Customize Slack」をクリック

customize_slack

Customoize Your Team 画面へ遷移します。

アイコン画像のアップロード

「Customoize Your Team」画面で、下記の手順でアイコンを登録します。

  1. 「Chose a name」で、アイコンに名前をつける
  2. 「Chose an emoji」で、アイコン画像をアップロードする。
  3. Saveボタンをクリック

ここでは、自社サービス「カップリンク」のアプリアイコンを登録しました。

登録完了

「Custom Emoji」一覧に、登録したアイコンが表示されます。これで登録完了です!

カスタム絵文字の利用方法

デフォルトで登録されている絵文字と同様に利用することができます。

おわりに

この記事では、プロジェクトが楽しくなり、コミュニケーションが円滑になる、Slackのカスタム絵文字の登録方法をご紹介しました。

リンクバルでは、自社サービスを一緒に開発するエンジニアを募集しておりますので、興味を持っていただきましたら、ぜひお問い合わせください!


国勢調査のデータと R を使って結婚について考える


未婚のアラフォー、堀内(♂)です。

弊社は恋愛をテーマとする会社であるためか、我ら技術部のメンバーも既婚だったり、同棲していたり、恋人持ちだったりする割合が多いようです。僕が新卒で入った技術100%みたいな会社の壊滅的な状況と比べると異次元です。まあ、技術部は30代が多いですしね。みな結婚を考える時期です。

部署の外に目をやると、イベント系の方々がたくさんいます。弊社は基本的にイベント会社なのです。新卒でも恋人持ちが多いらしく(伝聞:あまり話したことがない)、そのリア充ぶりに卒倒しそうです。そんな中で、僕に恋人がいないのは日本の政治が悪いに違いなかろうと、国勢調査のデータを調べてみることにしました。ツールは R です。

まず、「国勢調査の配偶関係データを R で取得する」で作成した、都道府県別の婚姻状況データを読み込みます。このデータは、15歳以上の日本の居住者を、都道府県毎、年齢毎、性別毎に、「未婚」「離別」「死別」「配偶関係不詳」「有配偶」に分けて記載しています。一般的には未婚、既婚の2分類を使いますが、国勢調査では婚姻関係を結んだ後の離別(離婚)と死別(配偶者の死亡)も区別しています。

census <- read.csv('prefs.csv')
attach(census)
census$age <- as.integer(sub('歳.*', '', age))
census$area_code <- as.factor(area_code)
census$area <- ordered(area, levels=unique(area))
census$marital_status <- ordered(
  marital_status,
  levels=rev(c('未婚', '離別', '死別', '配偶関係「不詳」', '有配偶'))
)
detach()

このデータは、全人口と、日本人の人口の両方を持っているので、外国人比率も参考までに押さえておきましょう。

num_of_all <- sum(census[census$nationality=='総数(国籍)',]$value, na.rm=T)
num_of_japanese <- sum(census[census$nationality=='日本人',]$value, na.rm=T)
print(sprintf(
  '全人口は %s 人、外国人居住者は %s 人で、全体の %f %% を占める。',
  prettyNum(num_of_all, big.mark=','),
  prettyNum(num_of_all - num_of_japanese, big.mark=','),
  (num_of_all - num_of_japanese) / num_of_all * 100)
)
=> [1] "全人口は 109,754,177 人、外国人居住者は 2,129,711 人で、全体の 1.940437 % を占める。"

全人口1.1億というのは少ないと思われるでしょうが、このデータには15才未満が含まれていないのです。婚姻関係を追うものですから。

15歳で結婚

参考までに、15〜18才の婚姻状態を調べてみましょう。

census %>%
  dplyr::filter(age <= 18, nationality == '総数(国籍)', marital_status == '有配偶') %>%
  na.omit() %>%
  group_by(gender, age) %>%
  summarize(population=sum(value)) %>%
  spread(gender, population)

15歳の女性が144人、男性が86人も配偶者を持っているのですね。民法では女性16歳、男性18歳から婚姻が認められますが、国勢調査の「有配偶」は、届出の有無に関係なく、実態を表しています。事実上、周囲から夫婦であると認められている状態です。一般的な言葉で言えば「事実婚」です。

続きを読む


国勢調査の配偶関係データを R で取得する


平成27年国勢調査のうち、配偶関係(婚姻関係)のデータを R で取得します。ここでは estatapi パッケージを使います。appId は、e-statのサイトで事前に取得しておきましょう。

library(estatapi)
statslist %>%
  dplyr::filter(grepl('平成27年.*配偶', STATISTICS_NAME)) %>%
  select(`@id`, TITLE) %>%
  mutate(TITLE=substr(TITLE, 0, 50))

求めるデータの @id が 0003149791 であることがわかったので、メタ情報を取得します。

metainfo <- estat_getMetaInfo(appId='xxxxx', statsDataId='0003149791')
metainfo
metainfo$cat04
# A tibble: 10 × 3
@code @name @level

1 0000 総数(配偶関係) 1
2 0010 未婚 1
3 0020 有配偶 1
4 0040 死別 1
5 0050 離別 1
6 0070 配偶関係「不詳」 1
7 0080 (配偶関係別割合(%)) 未婚 1
8 0090 (配偶関係別割合(%)) 有配偶 1
9 0110 (配偶関係別割合(%)) 死別 1
10 0120 (配偶関係別割合(%)) 離別 1

メタ情報には、様々な「コード」が入っています。上記はカテゴリ04(cat04)のコードの例。

データ取得時間短縮のため、メタ情報の @code を用いて絞り込んだデータを取得します。データ取得には数分かかります。

census <- estat_getStatsData(
  appId='xxxxx',
  statsDataId='0003149791',
  cdCat02=c('0010', '0020'), # 男、女
  cdCat04=c('0010', '0020', '0040', '0050', '0070'), # 未婚、有配偶、死別、離別、配偶関係「不詳」
  cdCat05='00710' # 全域
)
census$tab_code <- NULL
census$表章項目 <- NULL
census$cat01_code <- NULL
census$cat02_code <- NULL
census$cat03_code <- NULL
census$cat04_code <- NULL
census$cat05_code <- NULL
census$`全域・人口集中地区(2015)` <- NULL
census$time_code <- NULL
census$`時間軸(年次)` <- NULL
names(census) <- c('nationality', 'gender', 'age', 'marital_status', 'area_code', 'area', 'value')
census <- census[!grepl('総数|平均|再掲', census$age),]
census <- census[!grepl('市部$|郡部$', census$area),]
attach(census)
census$nationality <- as.factor(nationality)
census$gender <- as.factor(gender)
census$age <- ordered(age, levels=c(paste(15:99, '歳', sep=''), '100歳以上'))
census$marital_status <- as.factor(marital_status)
census$area_code <- as.factor(area_code)
census$area <- as.factor(area)

都道府県別、都市別のデータを取り出します。

census_prefs <- census %>%
  dplyr::filter(
    area_code != '00000',
    as.numeric(levels(area_code))[area_code] %% 1000 == 0
  )

census_cities <- census %>%
  dplyr::filter(as.numeric(levels(area_code))[area_code] %% 1000 != 0)

今後の利用のために CSV で保存しておきます。

write.csv(census_prefs, 'prefs.csv', row.names=F)
write.csv(census_cities, 'cities.csv', row.names=F)

この中に入っているデータは、こんな形式のものです。


リンクバルでは、Ruby と React と R を使って世の中をハッピーにしたいエンジニアを募集中です。この記事にピンと来た方は、是非ご応募ください。