Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elasticsearch 日本語スキーマレス環境構築と、ついでに多言語対応
Search
Kunihiko Kido
September 16, 2014
Technology
5
7.9k
Elasticsearch 日本語スキーマレス環境構築と、ついでに多言語対応
第6回elasticsearch勉強会「Elasticsearch 日本語スキーマレス環境構築と、ついでに多言語対応」資料
Kunihiko Kido
September 16, 2014
Tweet
Share
More Decks by Kunihiko Kido
See All by Kunihiko Kido
Elasticsearchで作るメディアサイト
kunihikokido
7
2.4k
emo.travel の紹介と Elasticsearch の活用について
kunihikokido
1
2.1k
VELTRA - Elastic{ON} Tour Tokyo 2017
kunihikokido
0
1.6k
Elasticsearch 勉強会 2/2
kunihikokido
1
1.5k
Elasticsearch 勉強会 1/2
kunihikokido
4
5.6k
Developers.IO 2016 C-2 「Elasticsearchで自由自在に検索・分析できるようになるためのヒント」
kunihikokido
7
2.1k
開発効率アップ!Elasticsearch Client Tool 作ってみた
kunihikokido
0
1.8k
はじめての Elasticsearch
kunihikokido
1
1.4k
Other Decks in Technology
See All in Technology
知覚とデザイン
rinchoku
1
660
オブザーバビリティが育むシステム理解と好奇心
maruloop
3
1.7k
AI連携の新常識! 話題のMCPをはじめて学ぶ!
makoakiba
0
160
マルチエージェントのチームビルディング_2025-10-25
shinoyamada
0
230
実践マルチモーダル検索!
shibuiwilliam
1
450
JSConf JPのwebsiteをGatsbyからNext.jsに移行した話 - Next.jsの多言語静的サイトと課題
leko
2
200
[re:Inent2025事前勉強会(有志で開催)] re:Inventで見つけた人生をちょっと変えるコツ
sh_fk2
1
1k
DMMの検索システムをSolrからElasticCloudに移行した話
hmaa_ryo
0
290
進化する大規模言語モデル評価: Swallowプロジェクトにおける実践と知見
chokkan
PRO
2
360
「タコピーの原罪」から学ぶ間違った”支援” / the bad support of Takopii
piyonakajima
0
160
AI時代の発信活動 ~技術者として認知してもらうための発信法~ / 20251028 Masaki Okuda
shift_evolve
PRO
1
130
可観測性は開発環境から、開発環境にもオブザーバビリティ導入のススメ
layerx
PRO
4
2.3k
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
22k
Producing Creativity
orderedlist
PRO
348
40k
Scaling GitHub
holman
463
140k
Documentation Writing (for coders)
carmenintech
75
5.1k
Designing Experiences People Love
moore
142
24k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
640
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Making Projects Easy
brettharned
120
6.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Transcript
&MBTUJDTFBSDIຊޠεΩʔϚϨ εڥߏஙͱɺ͍ͭͰʹଟݴޠରԠ ୈճ ษڧձ
ࣗݾհ ށࠃ ,6/*)*,0,*%0 ! φϨοδϫʔΫεגࣜձࣾ φϨοδϫʔΫεגࣜձࣾͰݕࡧˍΫϥυࣄۀؔ࿈ͷϚωʔδϝϯτͯ͠·͢ɻ &MBTUJDTFBSDIؔ࿈Ͱɻɻ ϒϩάʮ)FMMP&MBTUJDTFBSDIʯͱ͔ &MBTUJDTFBSDIBTBTFSWJDFʮ4JCB γʔό
ʯͷ اըɾӡӦͯ͠·͢ɻ “Hello! Elasticsearch” “ݕࡧBaaS” ͖ͭͮ8FCͰˠ
Ϛοϐϯάఆٛ ΊΜͲ͘͘͞ͳ͍Ͱ͔͢ʁ Ϛοϐϯάఆٛͱత ͪΐͬͱͨ͠σʔλͰઃܭඞཁͩ͠ɺ ਓʹΑͬͯશવҧ͏ઃܭʹͳͬͪΌ͏͠ɻɻ
Ϛοϐϯάఆٛʹʮతʯ͕͋Δ ㅟ ㅟ Ϛοϐϯάఆٛͱత ͦΕΘ͔Δ͚Ͳɻɻ
Ϛοϐϯάఆٛͱత ̍ ̎ ̏ ̐ ̑ ̒ ద߹Λ ্͍ͨ͠ ࠶ݱΛ
্͍ͨ͠ ਖ਼֬ʹ ߜΓࠐΈ͍ͨ ूܭ͍ͨ͠ ද͍ࣔͨ͠ BOENPSF ͔͠ϑΟʔϧυຖʹɻɻɻ ߟ͑Δ͜ͱ͕͍ͬͺ͍ʂ
Ϛοϐϯάఆٛͱత ̍ ̎ ̏ ̐ ̑ ̒ શҰகͰ ݕࡧɾूܭ͍ͨ͠ ʮʯʮʯʮݝʯ
Λলུͯ͠ݕࡧ͍ͨ͠ ϤϛͰݕࡧ͍ͨ͠ ಓݝίʔυ ॱͰιʔτ͍ͨ͠ ʮؔ౦ʯͳͲ ผ໊Ͱݕࡧɾूܭ͍ͨ͠ BOENPSFʜ ྫ͑ɺಓݝ໊ϑΟʔϧυ̍ͭͱͬͯ
Ϛοϐϯάఆٛͱత ঢ়گʹΑͬͯมԽ͢Δʮతʯ తʹΑͬͯมԽ͢ΔʮϚοϐϯάఆٛʯ Ϛοϐϯάͷઃܭॏཁ͚ͩͲʜ ʮతʯͷมԽΛఆͨ͠ઃܭʮܦݧʯ ݕࡧΤϯδϯͷςΫϊϩδʔͷཧղʮεΩϧʯ ͕ඞཁͬͯ͜ͱͳ͔ʁ ! ຖճઃܭ͢ΔͷΊΜͲ͏ͩ͠ɺٕज़ऀҭͯΔͷେม
Ϛοϐϯάఆٛͱత ຖճϚοϐϯάͷઃܭ͠ͳͯ͘ ಉ͡ઃܭࢥͰࣗಈతʹϚοϐϯάఆ͍ٛͨ͠ʂ ಉ͡ࢥ͍ͷਓ͖ͬͱ͍Δͣʂ ຖճʮFMBTUJDTFBSDINBQQJOHʯͰ άάΔͷݮΒ͍ͨͬ͢͠ɻɻ
Ϛοϐϯάఆٛͱత ͦͷΈ ͢Ͱʹ&MBTUJDTFBSDIʹ͋Γ·͢ʂ
%FNP %FNP
%FNP DELETE /myindex! ! PUT /myindex/mytype/1! ! {! "title": "Elasticsearch
ಛ·ͱΊ",! "description": "Elasticsearch Features — ओʹγεςϜΛத৺ͱͨ͠ಛ·ͱΊ",! "author": "Kunihiko Kido",! "link": "https://medium.com/hello-elasticsearch/elasticsearch-500996e47c70",! "tags": ["Elasticsearch"],! "pubDate": "2014-03-12T11:09"! } ͍ͭ௨Γɺ͜Μͳײ͡Ͱσʔλొ͢Δ͚ͩͰɺ ϑΟʔϧυຖʹඞཁͳϚοϐϯάఆ͕ٛग़དྷ্͕Δ
%FNP {! ...! "title" : {! "type" : "string",! "fields"
: {! "keyword" : {! "type" : "string",! "analyzer" : "keyword_analyzer"! },! "raw" : {! "type" : "string",! "index" : "not_analyzed"! },! "substring" : {! "type" : "string",! "analyzer" : "cjk"! },! "yomi" : {! "type" : "string",! "analyzer" : "katakana"! }! }! }! ...! }! UJUMFϑΟʔϧυͷϚοϐϯάఆٛ ˞ಈతʹ࡞͞ΕͨϚοϐϯάఆٛ
%FNP {! ...! "description" : {! "type" : "string",! "fields"
: {! "substring" : {! "type" : "string",! "analyzer" : "cjk"! }! }! },! ...! } ˞ಈతʹ࡞͞ΕͨϚοϐϯάఆٛ EFTDSJQUJPOϑΟʔϧυͷϚοϐϯάఆٛ
%FNP {! ...! "author" : {! "type" : "string",! "fields"
: {! "keyword" : {! "type" : "string",! "analyzer" : "keyword_analyzer"! },! "raw" : {! "type" : "string",! "index" : "not_analyzed"! },! "substring" : {! "type" : "string",! "analyzer" : "cjk"! },! "yomi" : {! "type" : "string",! "analyzer" : "katakana"! }! }! }! ...! }! BVUIPSϑΟʔϧυͷϚοϐϯάఆٛ ˞ಈతʹ࡞͞ΕͨϚοϐϯάఆٛ
%FNP {! ...! "link" : {! "type" : "string",! "index"
: "not_analyzed",! "fields" : {! "domain" : {! "type" : "string",! "analyzer" : "domain_analyzer"! },! "keyword" : {! "type" : "string",! "analyzer" : "keyword_analyzer"! },! "substring" : {! "type" : "string",! "analyzer" : "standard"! }! }! },! ...! } ˞ಈతʹ࡞͞ΕͨϚοϐϯάఆٛ MJOLϑΟʔϧυͷϚοϐϯάఆٛ
%FNP {! ...! "tags" : {! "type" : "string",! "fields"
: {! "keyword" : {! "type" : "string",! "analyzer" : "keyword_analyzer"! },! "raw" : {! "type" : "string",! "index" : "not_analyzed"! },! "substring" : {! "type" : "string",! "analyzer" : "cjk"! }! }! },! ...! }! ˞ಈతʹ࡞͞ΕͨϚοϐϯάఆٛ UBHTϑΟʔϧυͷϚοϐϯάఆٛ
%FNP ϚοϐϯάఆٛͰ໌ࣔతʹΞφϥΠβʔΛࢦఆ͠ͳ͍ͱ͍͏ҙຯ ㅟ ㅟ ㅟ ㅟ ㅟ TUBOEBSEΛ͏ͱݴ͏ҙຯͰͳ͍ͷͰҙ ଟݴޠରԠʮσϑΥϧτͷΞφϥΠβʔʯΛ͏
PUT /myindex/mytype/1! ! {! "title": "Elasticsearch Overview",! "description": "Elasticsearch Features —
System Overview",! "author": "Kunihiko Kido",! "link": "https://medium.com/hello-elasticsearch/elasticsearch-500996e47c70",! "tags": ["Elasticsearch"],! "pubDate": “2014-03-12T11:09”,! "language": “en",! } %FNP ʮӳޠʯͷจষͱͯ͠ΠϯσοΫε͍ͨ͠߹ ͜Ε͚ͩ
PUT /myindex/mytype/1! ! {! "title": "Elasticsearch ѐਃ",! "description": "Elasticsearch Features —
दझమ ѐਃ",! "author": "Kunihiko Kido",! "link": "https://medium.com/hello-elasticsearch/elasticsearch-500996e47c70",! "tags": ["Elasticsearch"],! "pubDate": “2014-03-12T11:09”,! "language": “ko",! } %FNP ʮؖࠃޠʯͷจষͱͯ͠ΠϯσοΫε͍ͨ͠߹ ͍͕͍ͱ؆୯ʂ
PUT /myindex/mytype/1! ! {! "title": "Elasticsearch Überblick",! "description": "Elasticsearch Features —
Systemübersicht",! "author": "Kunihiko Kido",! "link": "https://medium.com/hello-elasticsearch/elasticsearch-500996e47c70",! "tags": ["Elasticsearch"],! "pubDate": “2014-03-12T11:09”,! "language": “de",! } %FNP ʮυΠπޠʯͷจষͱͯ͠ΠϯσοΫε͍ͨ͠߹ ศར͔ʂ
%FNP ͋ͱɺଞͷϝϯόʔʹ ʮਖ਼֬ʹߜΓࠐΈ͍ͨ࣌ɺ SBXϑΟʔϧυ͏ʯ ͱ͔ɺ ʮݕࡧ࿙ΕΛগͳ͍ͨ͘͠߹ɺ TVCTUSJOH͏ʯ ͱ͔ڞ༗͢Εྑ͍͔ͳʁ
ϧʔϧԽͱద༻ͷࣗಈԽ ϧʔϧԽͱద༻ͷࣗಈԽ
ϧʔϧԽͱద༻ͷࣗಈԽ EZOBNJDUFNQMBUFT ʮϧʔϧԽʯ ϑΟʔϧυ໊ͷύλʔϯܕͷछྨʹΑͬͯ ϑΟʔϧυͷఆٛΛϧʔϧԽ͢ΔΈ JOEFYUFNQMBUF ʮద༻ͷࣗಈԽʯ ΠϯσοΫε࡞࣌ʹద༻͢ΔϧʔϧΛఆٛ ͓͚ͯ͠ΔΈ %FNPͷ༰Λ࣮ݱ͍ͯ͠ΔओͳΈ
EZOBNJDUFNQMBUFT EZOBNJDUFNQMBUFT
EZOBNJDUFNQMBUFT ʲEZOBNJDUFNQMBUFTʳͱ ϑΟʔϧυ໊ͷύλʔϯɾܕຖʹϚοϐϯάఆٛͷς ϯϓϨʔτ༻ҙ͓͚ͯ͠ΔΈ
EZOBNJDUFNQMBUFT {! ...! "dynamic_templates": [! {! "my_field": {! "match": "*",
/* ᶃ ϑΟʔϧυ໊ͷύλʔϯ */! "match_pattern": "regex", /* ᶄ matchͷϚονϯάํࣜ ʢলུՄʣ*/! "match_mapping_type": "string", /* ᶅ JSONϑΥʔϚοτͷλΠϓ */! "mapping": {...} /* ᶆ Ϛοϐϯάఆٛ */! }! },! ...(ෳఆٛͰ͖Δ)! ],! ...! }! ! جຊతͳઃఆ
EZOBNJDUFNQMBUFT {! "url_fields": {! "match": ".*url|.*link",! "match_pattern": "regex",! "match_mapping_type": "string",!
"mapping": {! "type": "string",! "index": "not_analyzed",! "fields": {! "keyword": {! "type": "string",! "analyzer": "keyword_analyzer"! },! "substring": {! "type": "string",! "analyzer": "standard"! },! "domain": {! "type": "string",! "analyzer": "domain_analyzer"! }! }! }! }! }! ྫʣ63-ϑΟʔϧυ͚
EZOBNJDUFNQMBUFT {! "special_string_fields": {! "match": ".*title.*|.*name.*|.*author.*",! "match_pattern": "regex",! "match_mapping_type": "string",!
"mapping": {! "type": "string",! "fields": {! "raw": {! "type": "string",! "index": "not_analyzed"! },! "keyword": {! "type": "string",! "analyzer": "keyword_analyzer"! },! "substring": {! "type": "string",! "analyzer": "ja-substring"! },! "yomi": {! "type": "string",! "analyzer": "katakana"! }! }! }! }! } ྫʣ໊শॏཁͳϑΟʔϧυ
EZOBNJDUFNQMBUFT {! "long_string_fields": {! "match": ".*message.*|.*content.*|.*description.*| .*text.*|.*body.*|.*note.*|.*memo.*",! "match_pattern": "regex",! "match_mapping_type":
"string",! "mapping": {! "type": "string",! "fields": {! "substring": {! "type": "string",! "analyzer": "ja-substring"! }! }! }! }! } ྫʣจϑΟʔϧυ
EZOBNJDUFNQMBUFT {! "short_string_fields": {! "match": "*",! "match_mapping_type": "string",! "mapping": {!
"type": "string",! "fields": {! "raw": {! "type": "string",! "index": "not_analyzed"! },! "keyword": {! "type": "string",! "analyzer": "keyword_analyzer"! },! "substring": {! "type": "string",! "analyzer": "ja-substring"! }! }! }! }! } ྫʣͦͷଞϑΟʔϧυ
EZOBNJDUFNQMBUFT {! ...! "dynamic_templates": [! {! “url_field": {…}! },! {!
"special_string_fields": {…}! },! {! "long_string_fields": {…}! },! {! "short_string_fields": {…}! },! ],! ...! } ࠷ॳʹύλʔϯʹϚονͨ͠Ϛο ϐϯά͕ఆٛ͞ΕΔ
JOEFYUFNQMBUF JOEFYUFNQMBUF
JOEFYUFNQMBUF ʲJOEFYUFNQMBUFʳͱʁ ΠϯσοΫε໊ͷύλʔϯຖʹΠϯσοΫεఆٛͷς ϯϓϨʔτΛ༻ҙ͓͚ͯ͠ΔΈ
JOEFYUFNQMBUF DPOpHUFNQMBUFTԼʹอଘ͢Δ͚ͩͰ४උ0, ˝FMBTUJDTFBSDI ˝DPOpH ˝UFNQMBUFT CBTFKTPO DVTUPN@BOBMZ[FSTKTPO KBQBOFTF@BOBMZ[FSTKTPO MBOHVBHF@BOBMZ[FSTKTPO TUSJOH@pFMETKTPO
%FNPͰ͍ͬͯΔJOEFY UFNQMBUFϑΝΠϧͨͪ ˡ ɾϊʔυͷ࠶ىಈඞཁͳ͍ ɾ৽نͰ࡞ͨ͠ΠϯσοΫεͷΈʹద༻͞ΕΔ ɾςϯϓϨʔτෳ࡞ΕΔ ɾ"1*ͰઃఆͰ͖Δ ɾEZOBNJDUFNQMBUFTͷఆؚٛΊΒΕΔ
JOEFYUFNQMBUF {! "my_template":{ /* ςϯϓϨʔτͷ໊લ */! "template": "*", /* ςϯϓϨʔτΛద༻͢ΔΠϯσΫε໊ͷύλʔϯ
*/! "order": 0, /* ςϯϓϨʔτΛద༻͢Δ༏ઌॱҐ */! "settings": {...}, /* γϟʔυͷͱ͔ɺAnalysis ͷઃఆΠϯσοΫεఆٛʹؔΘΔઃఆ */! "mappings": {...} /* Ϛοϐϯάఆٛͷઃఆɻdynamic templates͜͜Ͱઃఆ */! . . .! }! }! ! ! ! ! ! ϑΝΠϧ໊ͱςϯϓϨʔτ໊ͱΓ͋͑ͣಉ͡ʹ͓͚ͯ͠ྑ͍͔ͳʁ جຊతͳઃఆ
JOEFYUFNQMBUF {! "base": {! "template": "*",! "order": 1,! "mappings": {!
"_default_": {! "_timestamp" : {! "enabled" : true,! "store" : true! },! "_analyzer": {! "path": "language"! },! "_id": {! "path": "id"! },! "_source": {! "excludes" : ["attachment_file"]! }! }! }! }! }! UFNQMBUFTCBTFKTPO σϑΥϧτͷΞφϥΠβʔมߋ͢ΔͨΊͷMBOHVBHFϑΟʔϧυͷఆٛͳͲ
JOEFYUFNQMBUF {! "language_analyzers": {! "template": "*",! "order": 2,! "settings": {!
"analysis": {! "filter": {! "arabic_stop": {! "type": "stop",! "stopwords": "_arabic_"! },! "arabic_stemmer": {! "type": "stemmer",! "language": "arabic"! },! "armenian_stop": {! "type": "stop",! "stopwords": "_armenian_"! },! "armenian_stemmer": {! "type": "stemmer",! "language": "armenian"! },! "basque_stop": {! "type": "stop",! "stopwords": "_basque_"! },! "basque_stemmer": {! "type": "stemmer",! "language": "basque"! },! "brazilian_stop": {! "type": "stop",! "stopwords": "_brazilian_"! },! "brazilian_stemmer": {! "type": "stemmer",! "language": "brazilian"! },! "bulgarian_stop": {! "type": "stop",! "stopwords": "_bulgarian_"! },! "bulgarian_stemmer": {! "type": "stemmer",! "language": "bulgarian"! },! "catalan_elision": {! UFNQMBUFTMBOHVBHF@BOBMZ[FSTKTPO ֤ࠃݴޠຖͷϑΟϧλʔΞφϥΠβʔͷఆٛͳͲ
JOEFYUFNQMBUF {! "japanese_analyzers": {! "template": "*",! "order": 2,! "settings": {!
"analysis": {! "char_filter": {! "japanese_normalization": {! "type": "kuromoji_iteration_mark",! "normalize_kanji": true,! "normalize_kana": true! }! },! "filter": {! "romaji_readingform": {! "type": "kuromoji_readingform",! "use_romaji": true! },! "katakana_readingform": {! "type": "kuromoji_readingform",! "use_romaji": false! },! "katakana_stemmer": {! "type": "kuromoji_stemmer",! "minimum_length": 4! },! "japanese_stop": {! "type": "kuromoji_part_of_speech"! }! },! "tokenizer": {! "japanese_tokenizer": {! "type": "kuromoji_tokenizer",! "mode": "search"! }! },! "analyzer": {! "default": {! "alias": ["japanese", "ja"],! "type": "custom",! "char_filter": [! "html_strip",! "japanese_normalization"! ],! "tokenizer": "japanese_tokenizer",! "filter": [! "cjk_width",! "lowercase",! UFNQMBUFTKBQBOFTF@BOBMZ[FSTKTPO ຊޠؔ࿈ͷϑΟϧλʔΞφϥΠβʔͷఆٛͳͲ
JOEFYUFNQMBUF {! "custom_analyzers": {! "template": "*",! "order": 2,! "settings": {!
"analysis": {! "filter": {! "domain_extractor" : {! "type" : "pattern_replace",! "preserve_original": false,! "pattern" : "https?://([^/]+).*",! "replacement": "$1"! }! },! "tokenizer": {! "comma_tokenizer": {! "type": "pattern",! "pattern":"[,ɺ]+"! }! },! "analyzer": {! "domain_analyzer" : {! "alias": ["domain"],! "tokenizer" : "uax_url_email",! "filter" : [ "domain_extractor", "lowercase", "unique" ]! },! "comma_analyzer":{! "alias": ["comma"],! "type": "custom",! "tokenizer": "comma_tokenizer",! "filter": ["cjk_width", "lowercase", "trim", "unique"]! },! "keyword_analyzer": {! "type": "custom",! "tokenizer": "keyword",! "filter": ["cjk_width", "lowercase", "trim"]! }! }! }! }! }! } UFNQMBUFTDVTUPN@BOBMZ[FSTKTPO 63-͔ΒυϝΠϯ໊Λநग़ͨ͠Γݴޠʹґଘ͠ͳ͍ΞφϥΠβʔͷఆٛ
JOEFYUFNQMBUF {! "string_fields": {! "template": "*",! "order": 10,! "mappings": {!
"_default_": {! "dynamic_templates": [! {! "not_analyzed_fields": {! "match": "method|charSet|mimeType| content_type|language",! "match_pattern": "regex",! "match_mapping_type": "string",! "mapping": {! "type": "string",! "index": "not_analyzed"! }! }! },! {! "url_fields": {! "match": ".*url|.*link",! "match_pattern": "regex",! "match_mapping_type": "string",! "mapping": {! "type": "string",! "index": "not_analyzed",! "fields": {! "keyword": {! "type": "string",! "analyzer": "keyword_analyzer"! },! "substring": {! "type": "string",! "analyzer": "standard"! },! "domain": {! "type": "string",! "analyzer": "domain_analyzer"! }! }! }! }! },! {! "comma_separated_fields": {! "match": "meta_keywords",! "match_pattern": "regex",! "match_mapping_type": "string",! "mapping": {! UFNQMBUFTTUSJOH@pFMETKTPO TUSJOHܕϑΟʔϧυͷμΠφϛοΫςϯϓϨʔτఆٛ
JOEFYUFNQMBUF ˝ΠϯσοΫε࡞ TFUUJOHTཁૉͷద༻ ˝λΠϓͷ࡞ NBQQJOHTཁૉͷద༻ ˝ϑΟʔϧυσʔλͷՃ EZOBNJDUFNQMBUFTͷద༻ γϟʔυͷઃఆͱ͔"OBMZTJTͷఆٛ ͳͲ͜ͷλΠϛϯάͰద༻ɻ ݻఆͷϑΟʔϧυͷఆٛͳͲ͜ͷλ
ΠϛϯάͰద༻ɻ EZOBNJDUFNQMBUFTͷఆٛ͜ͷλΠ ϛϯάͰద༻ɻ ˡ ˡ ˡ ద༻ͷྲྀΕ ✔️ ✔️ ✔️
JOEFYUFNQMBUF ͞Βʹ ΠϨΪϡϥʔͳରԠͰ͖Δ ॊೈੑ݉Ͷඋ͑ͯ·͢ʂ ㅟ ㅟ ㅟ ͓͓ɺͦΕಋೖ͍͢͠ɻ
JOEFYUFNQMBUF ˝ΠϯσοΫε࡞ TFUUJOHTཁૉͷద༻ NBQQJOHTཁૉͷద༻ ˝ϑΟʔϧυσʔλͷՃ EZOBNJDUFNQMBUFTͷద༻ ΠϨΪϡϥʔͳରԠ͍ͨ͠߹ ✔️ ✔️ ✔️
ରͷϑΟʔϧυఆ͕ٛଘࡏ͠ͳ͍ ㅟ ㅟ ㅟ ㅟ ㅟ ㅟ ߹ɺEZOBNJDUFNQMBUFTͷఆٛ͜ͷ ㅟ λΠϛϯάͰద༻ɻ ˡ ΠϨΪϡϥʔͳϚοϐϯάఆٛΛ͍ͨ͠ ߹͜ͷλΠϛϯάͰఆٛ͢Ε0, ˝λΠϓͷ࡞
࠷ޙʹ ࠷ޙʹ
࠷ޙʹ ͜ΕͰ୭Ͱ؆୯ʹ &MBTUJDTFBSDIΛ͍͜ͳͤΔʂ ʜͨͿΜɺ͓ͦΒ͘ɺ͖ͬͱ ! ˞%FNPͷΈ4JCB IUUQTJCBUPLZP ʹಋೖ͍ͯ͠·͢ɻ ڵຯͷ͋ΔํɺͥͻΞΧϯτొͯ͠ಈ࡞Λ֬ೝͯ͠Έ͍ͯͩ͘͞ɻ վળͷཁɺ!·Ͱ͓͖͕Δʹʂ
࠷ޙʹ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
φϨοδϫʔΫε͔Β େͳ͓Βͤ
ʮୈճ&MBTUJDTFBSDIษڧձʯࢀՃऀݶఆ 4JCBͷແྉΛ υΩϡϝϯτʹ֦େ͠·͢ʂ Ξϯέʔτʹ͝ڠྗ͍ͩ͘͞ɻ ˞Ξϯέʔτʹ͝ճ͍͔ͨͩͳͯ͘4JCB͍͍ͨʂͱݴ͏߹0, ! ! ͥͻ͜ͷػձʹ4JCBΛͬͯΈ͍ͯͩ͘͞N @@ N
http://siba.tokyo