SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
メールフォーム
から
メールを送る
近代的な方法
@azumakuniyuki
YAPC::Kansai 2017 Osaka 2017/03/4(土) MOTEXさん
メールフォーム
から
メールを送る
近代的な方法
@azumakuniyuki
YAPC::Kansai 2017 Osaka 2017/03/4(土) MOTEXさん
メール送信
温故知新
自己紹介
@azumakuniyuki (東邦之)
株式会社Cubicroot (京都市)
3
- インフラエンジニア(ラック実装から構築・保守)
- *BSD, Linux, 古くはSolaris, SunOS
- ネットワークの設計・サーバの構築と保守
- インフラのコード化支援(Ansible,Serverspec)
- 数年前からプログラマー
- 主にPerl, Rubyも
- サイトの開発(バックエンド)
- メール関連の開発
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
ニャーン
4YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
子
曰
温
故
而
知
新
可
以
為
師
矣
論
語
・
爲
政
第
二
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
子
曰
温
故
而
知
新
可
以
為
師
矣
論
語
・
爲
政
第
二
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
7
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
/usr/sbin/sendmail
8
- 信頼と実績・歴史と伝統のSendmailそのもの
- -rwxr-sr-x root smmsp sendmail*
- setgidされたやつ
- おなじみのコマンドは全部/usr/sbin/sendmailが実体
- /usr/bin/newaliases
- /usr/bin/mailq
必ずある(V8Sendmail)
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
9
- /etc/alternatives/mta
- Postfixと同居しているパターン多い
- /usr/sbin/alternatives(8)で切り替えられる
- /usr/sbin/sendmail.sendmail
- /usr/sbin/sendmail.postfix
必ずある(何かと同居)
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
10
- Sendmailを駆逐したい勢力
- Sendmailが捨てられて何かに置き換わっている
- /var/qmail/bin/sendmail
- /usr/bin/exim
- macOS $ strings /usr/sbin/sendmail | grep postfix
必ずある(入れ替わってる?)
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
11
- どれも本家の/usr/sbin/sendmailとある程度の互換性がある
- my $sendmail = '/usr/sbin/sendmail -t';
- php.ini/sendmail_path=
- ; (default: "sendmail -t -i").
- CGI::FormBuilder
- qw(/usr/lib/sendmail /usr/sbin/sendmail /usr/bin/send...
- LWP::Protocol::mailto
- qw(/usr/sbin/sendmail /usr/lib/sendmail /usr/ucblib/s...
存在する前提になってる
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
12
$ hostname | mail -s 'Nyaan' neko@nyaan.jp
$ ls -laF `which mail`
lrwxrwxrwx ... /usr/bin/mail -> mailx*
$ strings /usr/bin/mailx | grep sendmail
/usr/sbin/sendmail
存在する前提になってる
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
13
無いといろいろマズい、たぶん
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
14
127.0.0.1:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
15
25 = SMTP
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
16
$ netstat -na | grep LISTEN | grep -E ':(25|587)'
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
# /usr/sbin/lsof -i:25
COMMAND PID USER ...
sendmail 2401 root ... localhost:smtp (LISTEN)
MTAでなくても動いてる
127.0.0.1:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
17
# mailq -Ac
/var/spool/clientmqueue (1 request)
...
v22IJrNi0022 ... Fri Mar 3 02:22 root
(Deferred: Connection refused by [127.0.0.1])
neko@nyaan.jp
# crontabの結果がメールで来ないとか、いろいろ困る。
動いてないとキューに溜まる
127.0.0.1:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
18
動いている前提になっている
localhost:25
- Mail::Sendmail
- 'smtp' => [ qw( localhost ) ],
- Email::Sender
- ::Transport::SMTP
- has host => (..., default => sub { 'localhost' });
- Email::Send::SMTP
- my $host = delete($args{Host}) || 'localhost';
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
19
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
20
192.0.2.222:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
21
別のSMTPサーバを経由する
192.0.2.222:25
- 多くのWebサーバから外へ出るメールのゲートウェイとして
- ゲートウェイ?
- ウィルスチェックをするとか
- 特定のFrom:なメールだけ通過させる
- 野良メールはゲートウェイで捨てる
- 優先度(Precedence:)別に処理するとか
- 登録完了系はすぐに送信
- お知らせ系はキューに貯めて毎時0分に送信
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
22
今は外へメールが送りにくい
192.0.2.222:25
- OP25B: Outbound Port 25 Blocking
- 一般家庭の回線から外部のSMTPへ接続できない
- ISPがブロックしている
- 固定IPアドレスの回線なら外向きのSMTP接続も大丈夫
- SPF: Sender Policy Framework
- DNSのTXTレコードで設定されている
- 「**@nyaan.jpは192.0.2.222からしか送信しませんよ」
- ↑TXTに書いていないとこからのメールは「迷惑メール」行き?
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
23
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
192.0.2.222:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
24
smtp.gmail.com:587
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
25
587 = Submission
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
26
SMTP認証を経てメール投函
smtp.gmail.com:587
- 587 = Submission
- <input type = 'submit' value = '送信'>
- 素数
- 587番ポートは認証が必須(で設定されているのが殆ど)
- OP25Bな環境では(ほぼ)唯一のメール送信方法
- ほとんどのメールサーバはSubmissionに対応している
- Gmail, Office365, Yahoo!, SendGrid, Amazon SES
- 会社のメールサーバとか(Sendmail, Postfix, ...)
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
27
Email::Sender
smtp.gmail.com:587
use Email::Sender;
my $SMTP = Email::Sender::Transport::SMTP->new(
'host' => 'smtp.gmail.com',
'port' => 587,
'sasl_username' => '*********@gmail.com',
'sasl_password' => '*************'
);
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
28
Net::SMTP or Net::SMTPS
smtp.gmail.com:587
use Net::SMTP; # TLSで通信するならNet::SMTPS;
use Authen::SASL;
my $smtp = Net::SMTP->new('smtp.gmail.com', 'Port'=>587);
my $auth = Authen::SASL->new('callback' => {
'user' => '*******@gmail.com',
'pass' => '********'
};
$smtp->auth($auth);
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
29
Sendmail (/etc/mail)
smtp.gmail.com:587
# grep authinfo sendmail.cf
Kauthinfo hash /etc/mail/authinfo
# vi authinfo
Authinfo:smtp.gmail.com "U:**@gmail.com" "P:**" "M:plain"
# makemap hash authinfo < authinfo
# chmod 0600 ./authinfo
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
30
Postfix (/etc/mail/postfix)
smtp.gmail.com:587
# grep smtp_sasl main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
# vi authinfo
[smtp.gmail.com]:587 ***@gmail.com:****
# /usr/sbin/postmap authinfo
# chmod 0600 ./authinfo*
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
31
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
smtp.GMail.com:587
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
192.0.2.222:25
#! /usr/bin/env perl
use Net::SMTP;
use Email::MIME;
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
32
「温故」編まとめ
SMTP or Submission
a. /usr/sbin/sendmailが要る
- コマンドラインでも送れるし
b. 127.0.0.1(localhost)の25番ポートでMTAが動いている
- Net::SMTPとか使っても送れる
c. 25番ポートにSMTP接続できる別サーバが要る
- WebサーバでMTAが動いていない時のため
d. 587番ポートで認証できるアカウントとサーバが要る
- OP25Bでブロックされている時
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
子
曰
温
故
而
知
新
可
以
為
師
矣
論
語
・
爲
政
第
二
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
34
443 = HTTPS
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
35
メール配信サービスのAPI
HTTP API
- 有名且つ大きいところ
- Amazon SES https://aws.amazon.com/jp/ses
- SendGrid https://sendgrid.kke.co.jp/
- 信頼と実績・歴史と伝統のSMTPインターフェイスもある
- Submission(認証して)で送る
- SMTPアレルギーが無いなら楽かも、たぶん。
- HTTP(HTTPS)で送信する方が速い
- 大量に送るならHTTP-APIを使う方が良い
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
36
AmazonSESのモジュール
HTTP API
- Amazon::SES
- 依存: [JSON::XS, Moo, LWP::UserAgent, ...]
- Net::AWS::SES
- 依存: [HTTP::Headers, LWP::UserAgent, MIME::*]
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
37
SendGridのモジュール
HTTP API
- Mojo::SendGrid (Mojolicious)
- 2016年3月に登場した(新しい!)
- Mail::SendGrid
- 2011年からある
- 依存: [HTTP::Tiny, IO::Socket::SSL, JSON, Moo, ...]
- WebService::SendGrid
- 依存: [JSON::XS, Moose, DateTime::Formt::HTTP, ...]
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
38
僕?
HTTP API
use Furl;
my $http = Furl->new(...);
my $mail = {
'to' => 'neko@nyaan.jp',
'from' => 'kijitora@example.jp',
'subject' => 'Nyaan',
'text' => Encode::encode('UTF-8', 'にゃーん'), ... };
$http->post('https://sendgrid.net/api/mail.send.json',, $mail);
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
39
依存が少ないのを選んでる
HTTP API
- 依存が沢山あるモジュールは好みでは無い
- Perlのコアモジュールなら少しぐらいOK
- 開発時間 < コードが動いている時間
- 依存は少ない方がええやんね
- 極少人数開発が多いし
- 依存先モジュールの変更点を追いかけるのは大変やし...
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
40
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
smtp.GMail.com:587
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
192.0.2.222:25
email.us-east-1...:443
sendgrid.com:443
#! /usr/bin/env perl
use Furl;
use Email::MIME;
#! /usr/bin/env perl
use Net::SMTP;
use Email::MIME;
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
41
SMTP
or
HTTP
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
42
どっちが良いの?
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
43
SMTPの良いところ
SMTP or HTTP
- MTAが操作できるなら非常に柔軟なことができる
- 手持ちのSMTP(Submission)アカウントで送信OK
- Gmail, Yahoo!でなくても自前で建てたサーバ経由でもOK
- そもそも昔からある汎用的な技術で枯れている!
- 選択肢が多い
- Sendmail, Postfix, qmail, Exim4, OpenSMTPD, Exchange,
- qpsmtpd
- コマンドラインから手軽に送信(mailx, telnet)
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
44
HTTPの良いところ
SMTP or HTTP
- MTA(SendmailやPostfixとか)が動いてなくてもOK
- そもそもSMTPに関わらなくても良い
- Webサイトに組み込みやすい
- メールキューの監視・管理をしなくても良い
- 外に出やすい(80, 443だけ外出OKとかOP25Bは無関係とか)
- テンプレート機能とかメール送信以外が充実
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
45
SMTPのイマイチなところ
SMTP or HTTP
- MTA(Sendmail, Postfix, ...)が必要になることが多い
- Sendmailは難解と言われる
- PostfixもSMTPの知識が無いと難しい
- キューの管理(たくさん滞留すると大変)
- 国内の携帯電話宛とか特に
- DNSのことも気にせなアカン
- 外出しにくい(OP25BとかSPFとか)
- ロストテクノロジー
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
46
HTTPのイマイチなところ
SMTP or HTTP
- 証明書とか面倒くさい
- ちょっとテストしたいだけやのに
- キューの制御ができない
- 一旦エンドポイントに渡した後は何もできない
- Suppressionリストが共有(Amazon SES)
- 同じリージョン内でバウンスしたアドレスには送れない
- 国内の携帯電話宛では厄介
- バウンス情報が少なすぎる(SendGrid)
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
47
適材適所
二者択一では無い
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
48
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
smtp.GMail.com:587
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
192.0.2.222:25
email.us-east-1...:443
sendgrid.com:443
#! /usr/bin/env perl
use Furl;
use Email::MIME;
#! /usr/bin/env perl
use Net::SMTP;
use Email::MIME;
127.0.0.1:2794
メールのヘッダと本文をJSON
で書いてHTTP POST
Haineko
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
49
メールを送った後
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
50
バウンス処理しましょ
Email Bounces
- メールアドレスは水物・ナマモノ
- Perlなら良いモジュールがある!
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
51
メールを送った後
Sisimai
http://libsisimai.org/
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
終

Contenu connexe

En vedette

First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuningrisou
 
僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。azumakuniyuki 🐈
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南Mikiya Okuno
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用純生 野田
 
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れるレガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れるsairoutine
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかIchito Nagata
 
今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10Daiki Ichinose
 
Twitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみたTwitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみたおさ OSA
 
開発の本質:チケット数を1/100にする方法
開発の本質:チケット数を1/100にする方法開発の本質:チケット数を1/100にする方法
開発の本質:チケット数を1/100にする方法Takahiro Kubo
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botdcubeio
 
サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事Hiroyuki Hiki
 
ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)UEHARA, Tetsutaro
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャazuma satoshi
 
PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々azumakuniyuki 🐈
 
人工知能と機械学習の違いって?
人工知能と機械学習の違いって?人工知能と機械学習の違いって?
人工知能と機械学習の違いって?Shuyo Nakatani
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiYukiya Nakagawa
 
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことKeisuke Nishitani
 
10年モノ熟成Perlとの付き合い方
10年モノ熟成Perlとの付き合い方10年モノ熟成Perlとの付き合い方
10年モノ熟成Perlとの付き合い方Masaki Nakagawa
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから真吾 吉田
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術karupanerura
 

En vedette (20)

First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 
僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れるレガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのか
 
今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10
 
Twitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみたTwitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみた
 
開発の本質:チケット数を1/100にする方法
開発の本質:チケット数を1/100にする方法開発の本質:チケット数を1/100にする方法
開発の本質:チケット数を1/100にする方法
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事
 
ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャ
 
PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々
 
人工知能と機械学習の違いって?
人工知能と機械学習の違いって?人工知能と機械学習の違いって?
人工知能と機械学習の違いって?
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
 
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
 
10年モノ熟成Perlとの付き合い方
10年モノ熟成Perlとの付き合い方10年モノ熟成Perlとの付き合い方
10年モノ熟成Perlとの付き合い方
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
 

Plus de azumakuniyuki 🐈

YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活azumakuniyuki 🐈
 
NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県azumakuniyuki 🐈
 
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4azumakuniyuki 🐈
 
SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2azumakuniyuki 🐈
 
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性azumakuniyuki 🐈
 
Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中azumakuniyuki 🐈
 
2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoringazumakuniyuki 🐈
 
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1 Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1 azumakuniyuki 🐈
 
実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013azumakuniyuki 🐈
 
JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013azumakuniyuki 🐈
 
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2azumakuniyuki 🐈
 
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tinyazumakuniyuki 🐈
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5azumakuniyuki 🐈
 
Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」azumakuniyuki 🐈
 
最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつazumakuniyuki 🐈
 
Perl and Email #2/Kansai.pm第14回ミーティング@京都
Perl and Email #2/Kansai.pm第14回ミーティング@京都Perl and Email #2/Kansai.pm第14回ミーティング@京都
Perl and Email #2/Kansai.pm第14回ミーティング@京都azumakuniyuki 🐈
 
KOF 2011 bounceHammerによるバウンスメール解析の技術
KOF 2011 bounceHammerによるバウンスメール解析の技術KOF 2011 bounceHammerによるバウンスメール解析の技術
KOF 2011 bounceHammerによるバウンスメール解析の技術azumakuniyuki 🐈
 

Plus de azumakuniyuki 🐈 (20)

YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活
 
NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県
 
Email is Slack
Email is SlackEmail is Slack
Email is Slack
 
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
 
SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2
 
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
 
Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中
 
2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring
 
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1 Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1
 
Perlの書籍紹介/KOF2013
Perlの書籍紹介/KOF2013Perlの書籍紹介/KOF2013
Perlの書籍紹介/KOF2013
 
実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013
 
JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013
 
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
 
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5
 
Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」
 
Namba.pm #0 LT資料
Namba.pm #0 LT資料Namba.pm #0 LT資料
Namba.pm #0 LT資料
 
最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ
 
Perl and Email #2/Kansai.pm第14回ミーティング@京都
Perl and Email #2/Kansai.pm第14回ミーティング@京都Perl and Email #2/Kansai.pm第14回ミーティング@京都
Perl and Email #2/Kansai.pm第14回ミーティング@京都
 
KOF 2011 bounceHammerによるバウンスメール解析の技術
KOF 2011 bounceHammerによるバウンスメール解析の技術KOF 2011 bounceHammerによるバウンスメール解析の技術
KOF 2011 bounceHammerによるバウンスメール解析の技術
 

メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA