Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
実録!『すぐわかるPerl』
〜社内ツール悲喜こもごも〜
2017-03-04
YAPC::Kansai
深沢 千尋
自己紹介
• 名前:深沢 千尋
• Twitter: @query1000
• Facebook: Chihiro Fukazawa
• メール: SuguwakaruPerl@gmail.com
• ブログ『イジハピ』で検索
著書
すぐわかるPerl(1999年)
著書
文字コード超研究(2003年)
著書
すぐわかるオブジェクト指向Perl(2008年)
著書
かんたんPerl(2016年)
今日のテーマ
「社内ツール」
• ソフトウェア開発以外の業務をしている
中小企業に勤めていたぼくが
• Perlを使っていかに作業の省力化に努めて
きたか
• Perlを使っていかに「作業の省力化の省力
化」に努めてきたか
要約ゆるふわで生き...
第1章:Perlとの出会い
私の業務経歴:
• 汎用機のプログラマー、SEをやってた
(黒歴史)
• 音楽ライターをちょっとやった
(謎歴史)
• 1995年に某ソフトハウスに入社
• ローカリゼーション、翻訳会社に変貌
• 「社内ツール」を作...
最初の作業
Bolandのワープロ「Sprint」の文書を
FrameMaker文書に変換する作業
先輩が作ったツールを流すだけの
簡単なお仕事
の、はずだった。。
最初の作業
先輩のツールは、
文書処理の大枠はawk
文字列置換はsed
それらを接ぎ合わせるのがsh
全部知らない!!!
似たようなものがいっぱい!!!
混乱する!!!
Perlとの出会い
会社の本棚にこの本を見つけた。。
初めてのPerl
Randal L. Schwartz (著), brian d foy (著), Tom Phoenix (著), 近藤 嘉雪 (翻訳)
オライリー・ジャパン刊
Larry Wallさんの序文
awk、sed、shのビーズを糸で繋ぐのをやめて
ビーズをブンゼンバーナーで溶かしてみたら
真珠のように輝き初めた!
感涙!
プログラムの4段階
• 第1段階:自分のために作る
=ワンライナー
• 第2段階:同僚のために作る
=社内ツール
• 第3段階:顧客のために作る
=オーダーウェア
• 第4段階:世界のために作る
=汎用ツール
今日は第1段階と第2段階の話をしま...
第2章:社内ツール進化論
ゆるふわなプログラミングで
自分と、隣の席の人を救うことについて。。
その1
テンライナーのすすめ
ワンライナーはスゴイ!
• こんなの…
$ perl -MFile::Find -MFile::Basename -e
'find sub{$h{(fileparse($_,qw{.[^.]+$}))[2]}++
if -f},@ARGV;EN...
使ってみた…
• 拡張子ごとにファイルを集計してた!
ぼくはスゴくないので
こうします…😅
#! /usr/bin/perl
#
# sumDir.pl -- 任意のディレクトリ配下のファイルを拡張子ごとに集計する
use 5.010;
#use strict;
use warnings;
use...
実際にはこうします…😅
#! /usr/bin/perl
#
# sumDir2.pl -- 任意のディレクトリ配下のファイルを拡張子単位に集計する
use 5.010;
use strict;
use warnings;
use File::...
実際にはこうします…😅
#(つづき)
for (sort keys %hash) {
say "$_:$hash{$_}";
}
sub file_proc {
return unless -f $_;
# http://d.hatena.ne...
正規表現もスゴイやつはスゴイ!
• こんなの…
# 正しいクレジットカード番号かどうか
/^((4d{3})|(5[1-5]d{2})|(6011))([- ])?d{4}([-
])?d{4}([- ])?d{4}|3[4,7]d{13}$/
ぼくはスゴくないので
こうします…😅/^
(
(4d{3})| # VISA
(5[1-5]d{2})| # MASTER
(6011) # Discover
)
([- ])? # 空白はエスケープする
d{4}
([- ])?
d{4}
(...
実際にはこうします…😅
#! /usr/bin/perl
#
# crecaCheck.pl – クレジットカードチェックのデモ
use 5.010;
use strict;
use warnings;
while(<DATA>) {
chom...
実際にはこうします…😅
sub is_credit { #(つづき!)
my $_ = shift;
1 while s/[- ]//;
if (/D/) {
“”;
} elsif (/^3[47]d{13}$/) { # AMEXだけは15...
実際にはこうします…😅
#(つづき!2)
__DATA__
3xxx4xxx5xxx6xxx
3xxx-4xxx-5xxx-6xxx
3300-0000-0000-000
3400-0000-0000-000
3500-0000-0000-00...
JCB対応もカンタン!😝
sub is_credit {
my $_ = shift;
1 while s/[- ]//;
if (/D/) {
“”;
} elsif (/^3[47]d{13}$/) { # AMEXだけは全15桁、他は16...
スゴイ正規表現はどこから来るか
• 正規表現しか使えないツールから来るこ
とがある
– スーパー検索置換プログラム
– オフィスソフト、DTPソフト
• Perlに移植すれば自由自在に書き伸ばせる
ここまでのまとめ
• スゴイ人はワンライナーで脳を生かして
仕事をする
• スゴくないぼくもテンライナーにすれば
Perlが仕事してくれる
• 好きずき(TMTOWTDI)
• テンライナーは可読性が高く、あとあと
メンテしやすい
その2
テンライナーの味噌蔵を作ろう
テンライナーの味噌蔵とは
• ある単一の小さな作業を自動化するか
• ある単一の新しい機能をテストする
• 10行で出来た小プログラム集である!
• 大きなプログラムを書くとき便利!
• 自分用プログラム辞典になる!
テンライナーの味噌蔵とは
• 完動プログラムにしておくと便利!
• データも内蔵しておくと便利!
• テンライナーの味噌蔵を貯めるには。。
• やりたいこと(作業)から攻める!
• できること(技術)から攻める!
例1:漢字かな逆変換
Text::Kakasiを使う
例2:Date::Simple(モジュールの
シノプシスを動かす!)
(例)Date::Simpleモジュール
http://search.cpan.org/~izut/
Date-Simple-3.03/
lib/Date/Simple.pm
例2:Date::Simple(モジュールの
シノプシスを動かす!)
#! /usr/bin/perl
#
# dateSimpleTest.pl --- Date::Simpleのテスト
use 5.010;
use strict;
use ...
例3:正規表現テスター
正規表現をテストしたいときがある。
GUIのツールもあるが、ダサい。
※画像はイメージです
例3:正規表現テスター#! /usr/bin/perl
#
# regTest.pl -- 正規表現テスター
use 5.010;
use strict;
use warnings;
use utf8;
binmode DATA, ":enco...
例3:正規表現テスター(つづき!)
__DATA__
1 指原 莉乃 Rino_Sashihara@example.com Team-H HKT48
2 大島 優子 Yuuko_Ohshima@example.com Team-K AKB48
...
その3:MS Officeとの共存
MS OfficeとPerlを協調させよう!
Office (Excel、Word、Etc...)は自動化言語
VBAを持っている
なんでも出来る!(したければ!)
でも、可能な限りPerlでやる手もある!
...
MS Officeとの共存(キセル方式)
火皿と吸口だけVBAでやる
羅宇の部分はPerlでやる
MS Officeとの共存(キセル方式)
最初の状態(Word docx5個)
MS Officeとの共存(キセル方式)
Word docxの中身
MS Officeとの共存(キセル方式)
ツール(フォーム付きマニュアル)
MS Officeとの共存(キセル方式)
エクスポートするVBA
Private Sub CommandButton1_Click()
Dim files(100)
mypath = Environ("UserProfile") & "Desk...
MS Officeとの共存(キセル方式)
エクスポート後(XML5個追加)
MS Officeとの共存(キセル方式)
エクスポート後(XML5個追加)
MS Officeとの共存(キセル方式)
インポートするVBA
Private Sub CommandButton11_Click()
Dim files(100)
mypath = Environ("UserProfile") & "Desk...
MS Officeとの共存(キセル方式)
インポート後(XML.DOCX5個追加)
MS Officeとの共存(お墓方式)
Word文書から文言を抽出する
抽出した後には「お墓」を残す
(概念だけ説明します。。)
MS Officeとの共存(お墓方式)
英語のdocxファイル
索引が
「XEフィールド」に
入っている
(隠し文字)
MS Officeとの共存(お墓方式)
英文の場合はきちん
と辞書順に索引がで
きる。。
MS Officeとの共存(お墓方式)
「XEフィールド」を
そのまま翻訳する
と。。
MS Officeとの共存(お墓方式)
文字コード順に索引
ができる。。
MS Officeとの共存(お墓方式)
本来は
「y」スイッチで
読みを入れる
これを自動化したい
MS Officeとの共存(お墓方式)
Word VBAで
XEフィールドから
索引を抜く
このとき、跡地に
★n★という形で
お墓を立てておく
MS Officeとの共存(お墓方式)
同じWordVBAで
★n★ → 索引語
というタブ区切りテキストを作る
MS Officeとの共存(お墓方式)
PerlでText::Kakasiを使って
★n★ → 索引語 → よみがな
というテキストを作る
MS Officeとの共存(お墓方式)
先程の
★お墓★ファイルに
索引、
yスイッチ、
読みの形で戻す
MS Officeとの共存(お墓方式)
よみがな順に索引が
できる。。
実は…索引付き文書の翻訳は、
索引から翻訳するとラク!
• 原文を書く人は、内容を書いてから索引を
作ったであろう
• でも翻訳をする人は、まず索引項目を抜いて
しまうとラク!
1. 原文でソートし、同じ言葉を寄せて統一的
に翻訳する
2. 索...
第3章:社内ツールの社会学
開発者、ユーザー、会社全体にとっての
利点と問題点
社内ツールの良さ
(開発者にとって)
• 簡単に書ける
(見た目や汎用性に気を使わない)
• 過去の資産が活かせる
(同じようなパターンを頼まれる)
• 手順を教えるより簡単
(メールで用が済む)
• スキルアップする
(仕事が学びになる。ウマ...
社内ツールの良さ
(ユーザーにとって)
• 軽い
(汎用ソフトは重くて大げさ)
• 痒いところに手が届く
(社内独自のフローに特化できる)
• 要望がすぐに聞き届けられる
(要望してくれたらな!)
• スキルアップする
(ユーザーからパワーユー...
社内ツールの問題点
(開発者にとって)
• なかなかテストしてくれない
(納期の直前に初走行…
忙しいからしょうがないんだけど…)
• 予想外の使い方、裏マニュアルの横行…
「新しいバージョンは動かないから
古いバージョンを使うこと」
「消費税...
社内ツールの問題点
(ユーザーにとって)
• しょせん素人が作っているのでバグって
いる
(スミマセン…)
(要望してくれれば直すけど…)
(直したら次回からはバグってないから
手作業でやるよりいいと思うけど…)
• 予算が割けない
(納品しな...
会社の意義
• 決められた手順通りに実直にやる人がエ
ライのか(家康型)
• 常に新しい手順がないか希求する人がエ
ライのか(秀吉型)
• お互いにリスペクトして仲良く協力して
やればいい!
愛は愛を生む💕
ご静聴ありがとうございました。。
2017-03-04
YAPC::Kansai
Chihiro Fukazawa
©All rights reserved.
Upcoming SlideShare
Loading in …5
×

実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜

158 views

Published on

2017-03-04(土)、大阪で開催されたYAPC::Kansaiに、ゲスト スピーカーとして登壇しました。そのときのスライドです。トークや質疑応答なども含めたセルフツッコミやは、後日ブログで追記します。

Published in: Software
  • Be the first to comment

  • Be the first to like this

実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜

  1. 1. 実録!『すぐわかるPerl』 〜社内ツール悲喜こもごも〜 2017-03-04 YAPC::Kansai 深沢 千尋
  2. 2. 自己紹介 • 名前:深沢 千尋 • Twitter: @query1000 • Facebook: Chihiro Fukazawa • メール: SuguwakaruPerl@gmail.com • ブログ『イジハピ』で検索
  3. 3. 著書 すぐわかるPerl(1999年)
  4. 4. 著書 文字コード超研究(2003年)
  5. 5. 著書 すぐわかるオブジェクト指向Perl(2008年)
  6. 6. 著書 かんたんPerl(2016年)
  7. 7. 今日のテーマ 「社内ツール」 • ソフトウェア開発以外の業務をしている 中小企業に勤めていたぼくが • Perlを使っていかに作業の省力化に努めて きたか • Perlを使っていかに「作業の省力化の省力 化」に努めてきたか 要約ゆるふわで生きてきた!
  8. 8. 第1章:Perlとの出会い 私の業務経歴: • 汎用機のプログラマー、SEをやってた (黒歴史) • 音楽ライターをちょっとやった (謎歴史) • 1995年に某ソフトハウスに入社 • ローカリゼーション、翻訳会社に変貌 • 「社内ツール」を作っていた
  9. 9. 最初の作業 Bolandのワープロ「Sprint」の文書を FrameMaker文書に変換する作業 先輩が作ったツールを流すだけの 簡単なお仕事 の、はずだった。。
  10. 10. 最初の作業 先輩のツールは、 文書処理の大枠はawk 文字列置換はsed それらを接ぎ合わせるのがsh 全部知らない!!! 似たようなものがいっぱい!!! 混乱する!!!
  11. 11. Perlとの出会い 会社の本棚にこの本を見つけた。。 初めてのPerl Randal L. Schwartz (著), brian d foy (著), Tom Phoenix (著), 近藤 嘉雪 (翻訳) オライリー・ジャパン刊
  12. 12. Larry Wallさんの序文 awk、sed、shのビーズを糸で繋ぐのをやめて ビーズをブンゼンバーナーで溶かしてみたら 真珠のように輝き初めた! 感涙!
  13. 13. プログラムの4段階 • 第1段階:自分のために作る =ワンライナー • 第2段階:同僚のために作る =社内ツール • 第3段階:顧客のために作る =オーダーウェア • 第4段階:世界のために作る =汎用ツール 今日は第1段階と第2段階の話をします👽
  14. 14. 第2章:社内ツール進化論 ゆるふわなプログラミングで 自分と、隣の席の人を救うことについて。。
  15. 15. その1 テンライナーのすすめ
  16. 16. ワンライナーはスゴイ! • こんなの… $ perl -MFile::Find -MFile::Basename -e 'find sub{$h{(fileparse($_,qw{.[^.]+$}))[2]}++ if -f},@ARGV;END{map{print "$_:$h{$_}n"}keys %h}' . • これが「あ、なるほど!」と思う人はこ れを使いましょう (ヒストリにためておくといいらしい)
  17. 17. 使ってみた… • 拡張子ごとにファイルを集計してた!
  18. 18. ぼくはスゴくないので こうします…😅 #! /usr/bin/perl # # sumDir.pl -- 任意のディレクトリ配下のファイルを拡張子ごとに集計する use 5.010; #use strict; use warnings; use File::Find; use File::Basename; find sub {$h{(fileparse($_,qw{.[^.]+$}))[2]}++ if -f},@ARGV; END { map{ print "$_:$h{$_}n"; }keys %h }
  19. 19. 実際にはこうします…😅 #! /usr/bin/perl # # sumDir2.pl -- 任意のディレクトリ配下のファイルを拡張子単位に集計する use 5.010; use strict; use warnings; use File::Find; use File::Basename; my $dir = shift; my %hash = (); find &file_proc, $dir; #(つづく)
  20. 20. 実際にはこうします…😅 #(つづき) for (sort keys %hash) { say "$_:$hash{$_}"; } sub file_proc { return unless -f $_; # http://d.hatena.ne.jp/perlcodesample/20100225/1264257759 my ($basename, $dirname, $ext) = fileparse($_, qr/..*$/); $hash{$ext} += 1; }
  21. 21. 正規表現もスゴイやつはスゴイ! • こんなの… # 正しいクレジットカード番号かどうか /^((4d{3})|(5[1-5]d{2})|(6011))([- ])?d{4}([- ])?d{4}([- ])?d{4}|3[4,7]d{13}$/
  22. 22. ぼくはスゴくないので こうします…😅/^ ( (4d{3})| # VISA (5[1-5]d{2})| # MASTER (6011) # Discover ) ([- ])? # 空白はエスケープする d{4} ([- ])? d{4} ([- ])? d{4} | 3[4,7]d{13}$ # AMEX (15桁) /x # xスイッチを使ってeXpandする
  23. 23. 実際にはこうします…😅 #! /usr/bin/perl # # crecaCheck.pl – クレジットカードチェックのデモ use 5.010; use strict; use warnings; while(<DATA>) { chomp; if (&is_credit($_)) { say “Yes credit! : $_”; } else { say “No credit! : $_”; } } #(つづく!)
  24. 24. 実際にはこうします…😅 sub is_credit { #(つづき!) my $_ = shift; 1 while s/[- ]//; if (/D/) { “”; } elsif (/^3[47]d{13}$/) { # AMEXだけは15桁、他は16桁 "AMEX"; } elsif (/^4d{15}$/) { "VISA"; } elsif (/^5[1-5]d{14}$/) { "Master"; } elsif (/^6011[02-4]d{12}$/) { "Discover"; } else { “”; } } #(つづく!2)
  25. 25. 実際にはこうします…😅 #(つづき!2) __DATA__ 3xxx4xxx5xxx6xxx 3xxx-4xxx-5xxx-6xxx 3300-0000-0000-000 3400-0000-0000-000 3500-0000-0000-000 3700-0000-0000-000 3700-0000-0000-0000 4000-0000-0000-000
  26. 26. JCB対応もカンタン!😝 sub is_credit { my $_ = shift; 1 while s/[- ]//; if (/D/) { “”; } elsif (/^3[47]d{13}$/) { # AMEXだけは全15桁、他は16桁 "AMEX"; } elsif (/^352[89]d{12}$/) { "JCB"; } elsif (/^4d{15}$/) { "VISA"; } elsif (/^5[1-5]d{14}$/) { "Master"; } elsif (/^6011[02-4]d{12}$/) { "Discover"; } else { “”;
  27. 27. スゴイ正規表現はどこから来るか • 正規表現しか使えないツールから来るこ とがある – スーパー検索置換プログラム – オフィスソフト、DTPソフト • Perlに移植すれば自由自在に書き伸ばせる
  28. 28. ここまでのまとめ • スゴイ人はワンライナーで脳を生かして 仕事をする • スゴくないぼくもテンライナーにすれば Perlが仕事してくれる • 好きずき(TMTOWTDI) • テンライナーは可読性が高く、あとあと メンテしやすい
  29. 29. その2 テンライナーの味噌蔵を作ろう
  30. 30. テンライナーの味噌蔵とは • ある単一の小さな作業を自動化するか • ある単一の新しい機能をテストする • 10行で出来た小プログラム集である! • 大きなプログラムを書くとき便利! • 自分用プログラム辞典になる!
  31. 31. テンライナーの味噌蔵とは • 完動プログラムにしておくと便利! • データも内蔵しておくと便利! • テンライナーの味噌蔵を貯めるには。。 • やりたいこと(作業)から攻める! • できること(技術)から攻める!
  32. 32. 例1:漢字かな逆変換 Text::Kakasiを使う
  33. 33. 例2:Date::Simple(モジュールの シノプシスを動かす!) (例)Date::Simpleモジュール http://search.cpan.org/~izut/ Date-Simple-3.03/ lib/Date/Simple.pm
  34. 34. 例2:Date::Simple(モジュールの シノプシスを動かす!) #! /usr/bin/perl # # dateSimpleTest.pl --- Date::Simpleのテスト use 5.010; use strict; use warnings; use Date::Simple ('date', 'today'); # Difference in days between two dates: my $diff = date('2017-03-04') - date('2017-01-01'); say "今年に入ってから $diff 日が経った"; # Offset $n days from now: my $date = today() + 100; say "今日の100日後は $date"; # uses ISO 8601 format (YYYY-MM-DD) 他にも、技術書の コードスニペットを 動くようにする というのも考えられる…
  35. 35. 例3:正規表現テスター 正規表現をテストしたいときがある。 GUIのツールもあるが、ダサい。 ※画像はイメージです
  36. 36. 例3:正規表現テスター#! /usr/bin/perl # # regTest.pl -- 正規表現テスター use 5.010; use strict; use warnings; use utf8; binmode DATA, ":encoding(UTF-8)"; binmode STDOUT, ":encoding(UTF-8)"; while (<DATA>) { print if /Team-A/; # Team Aの人 } # 順位 t 苗字 sp 名前 t メールアドレス t チーム名 t グループ名n # メール アドレスは「ローマ字名_ローマ字苗字@example.com」(※架空のもので す) __DATA__ (つづく!)
  37. 37. 例3:正規表現テスター(つづき!) __DATA__ 1 指原 莉乃 Rino_Sashihara@example.com Team-H HKT48 2 大島 優子 Yuuko_Ohshima@example.com Team-K AKB48 3 渡辺 麻友 Mayu_Watanabe@example.com Team-B AKB48 4 柏木 由紀 Yuki_Kashiwagi@example.com Team-B AKB48 5 篠田 麻里子 Mariko_Shinoda@example.com Team-A AKB48 6 松井 珠理奈 Jurina_Matsui@example.com Team-E SKE48 7 松井 玲奈 Rena_Matsui@example.com Team-S SKE48 8 高橋 みなみ Minami_Takahashi@example.com Team-A AKB48 9 小嶋 陽菜 Haruna_Kojima@example.com Team-A AKB48 10 宮澤 佐江 Sae_Miyazawa@example.com Team-K AKB48 11 板野 友美 Tomomi_Itano@example.com Team-K AKB48 12 島崎 遥香 Haruka_Shimazaki@example.com Team-B AKB48 13 横山 由依 Yui_Yokoyama@example.com Team-A AKB48 14 山本 彩 Sayaka_Yamamoto@example.com Team-N NMB48 15 渡辺 美優紀 Miyuki_Watanabe@example.com Team-M NMB48 16 須田 亜香里 Akari_Suda@example.com Team-KII SKE48
  38. 38. その3:MS Officeとの共存 MS OfficeとPerlを協調させよう! Office (Excel、Word、Etc...)は自動化言語 VBAを持っている なんでも出来る!(したければ!) でも、可能な限りPerlでやる手もある! • キセル方式 • お墓方式
  39. 39. MS Officeとの共存(キセル方式) 火皿と吸口だけVBAでやる 羅宇の部分はPerlでやる
  40. 40. MS Officeとの共存(キセル方式) 最初の状態(Word docx5個)
  41. 41. MS Officeとの共存(キセル方式) Word docxの中身
  42. 42. MS Officeとの共存(キセル方式) ツール(フォーム付きマニュアル)
  43. 43. MS Officeとの共存(キセル方式) エクスポートするVBA Private Sub CommandButton1_Click() Dim files(100) mypath = Environ("UserProfile") & "Desktopfoo" files(1) = Dir(mypath & "*.docx") i = 1 Do While files(i) <> "" i = i + 1 files(i) = Dir() Loop i = 1 Do While files(i) <> "" Documents.Open FileName:=mypath & files(i) ‘ここで何かやってもいいが、何もせず保存している ActiveDocument.SaveAs2 FileName:=mypath & files(i) & ".XML", fileformat:=wdFormatXML ActiveDocument.Close i = i + 1 Loop End Sub
  44. 44. MS Officeとの共存(キセル方式) エクスポート後(XML5個追加)
  45. 45. MS Officeとの共存(キセル方式) エクスポート後(XML5個追加)
  46. 46. MS Officeとの共存(キセル方式) インポートするVBA Private Sub CommandButton11_Click() Dim files(100) mypath = Environ("UserProfile") & "Desktopfoo" files(1) = Dir(mypath & "*.xml") i = 1 Do While files(i) <> "" i = i + 1 files(i) = Dir() Loop i = 1 Do While files(i) <> "" Documents.Open FileName:=mypath & files(i) ‘何もせず保存するだけ ActiveDocument.SaveAs2 FileName:=mypath & files(i) & ".DOCX", fileformat:=wdFormatXMLDocument ActiveDocument.Close i = i + 1 Loop End Sub
  47. 47. MS Officeとの共存(キセル方式) インポート後(XML.DOCX5個追加)
  48. 48. MS Officeとの共存(お墓方式) Word文書から文言を抽出する 抽出した後には「お墓」を残す (概念だけ説明します。。)
  49. 49. MS Officeとの共存(お墓方式) 英語のdocxファイル 索引が 「XEフィールド」に 入っている (隠し文字)
  50. 50. MS Officeとの共存(お墓方式) 英文の場合はきちん と辞書順に索引がで きる。。
  51. 51. MS Officeとの共存(お墓方式) 「XEフィールド」を そのまま翻訳する と。。
  52. 52. MS Officeとの共存(お墓方式) 文字コード順に索引 ができる。。
  53. 53. MS Officeとの共存(お墓方式) 本来は 「y」スイッチで 読みを入れる これを自動化したい
  54. 54. MS Officeとの共存(お墓方式) Word VBAで XEフィールドから 索引を抜く このとき、跡地に ★n★という形で お墓を立てておく
  55. 55. MS Officeとの共存(お墓方式) 同じWordVBAで ★n★ → 索引語 というタブ区切りテキストを作る
  56. 56. MS Officeとの共存(お墓方式) PerlでText::Kakasiを使って ★n★ → 索引語 → よみがな というテキストを作る
  57. 57. MS Officeとの共存(お墓方式) 先程の ★お墓★ファイルに 索引、 yスイッチ、 読みの形で戻す
  58. 58. MS Officeとの共存(お墓方式) よみがな順に索引が できる。。
  59. 59. 実は…索引付き文書の翻訳は、 索引から翻訳するとラク! • 原文を書く人は、内容を書いてから索引を 作ったであろう • でも翻訳をする人は、まず索引項目を抜いて しまうとラク! 1. 原文でソートし、同じ言葉を寄せて統一的 に翻訳する 2. 索引項目の対訳用語集になる 3. 索引項目を原文に戻す 4. 原文を翻訳する 5. ページ数が変わるので索引を再生成する
  60. 60. 第3章:社内ツールの社会学 開発者、ユーザー、会社全体にとっての 利点と問題点
  61. 61. 社内ツールの良さ (開発者にとって) • 簡単に書ける (見た目や汎用性に気を使わない) • 過去の資産が活かせる (同じようなパターンを頼まれる) • 手順を教えるより簡単 (メールで用が済む) • スキルアップする (仕事が学びになる。ウマー!)
  62. 62. 社内ツールの良さ (ユーザーにとって) • 軽い (汎用ソフトは重くて大げさ) • 痒いところに手が届く (社内独自のフローに特化できる) • 要望がすぐに聞き届けられる (要望してくれたらな!) • スキルアップする (ユーザーからパワーユーザーになれる)
  63. 63. 社内ツールの問題点 (開発者にとって) • なかなかテストしてくれない (納期の直前に初走行… 忙しいからしょうがないんだけど…) • 予想外の使い方、裏マニュアルの横行… 「新しいバージョンは動かないから 古いバージョンを使うこと」 「消費税は入れられないから手で入れること」 要望してくれよーーー!!!😂
  64. 64. 社内ツールの問題点 (ユーザーにとって) • しょせん素人が作っているのでバグって いる (スミマセン…) (要望してくれれば直すけど…) (直したら次回からはバグってないから 手作業でやるよりいいと思うけど…) • 予算が割けない (納品しないものを作る予算はない…)
  65. 65. 会社の意義 • 決められた手順通りに実直にやる人がエ ライのか(家康型) • 常に新しい手順がないか希求する人がエ ライのか(秀吉型) • お互いにリスペクトして仲良く協力して やればいい! 愛は愛を生む💕
  66. 66. ご静聴ありがとうございました。。 2017-03-04 YAPC::Kansai Chihiro Fukazawa ©All rights reserved.

×