韓国でLINEはマイナー!韓国人の私がLINEの日本上場について思うこと
高校時代パイロットになる夢があって技術先進国である日本の航空大学を目指していました。残念ながら夢は叶えなかったもののソフトウェアエンジニアとして日本で働くことができました!もう日本に来て10年目になりましたPR TIMESのエンジニアギルです。
最近LINEの上場が話題になりましたね。LINEは韓国のNaverの子会社で、日本では2000年にハンゲームジャパン株式会社として設立されました。311後にリリースしたLINEが大ヒットしたため、知名度を活かすため、2013年にLINE株式会社に社名変更を行いました。
日本ではLINEは言うまでもなく有名なアプリですが、韓国ではあまり使われないのが現状で、メッセンジャーとしてはカカオトークが一番使われてます。日本でLINEはメッセンジャーアプリのイメージが強いのですが、韓国でNaverは検索サイトの最大手で、日本におけるYahoo!のような存在です。
マーケットリサーチ企業GlobalWebIndex社が今年発表した世界のメッセンジャー別利用ランキングではLINEは世界4位、利用率10%でした。日本でLINEは圧倒的なシェアを誇っていますが、世界的にはそうではないようです。
今回LINEの上場によってグローバル責任者シン・ジュンホ氏のストックオプション価値は3104億ウォン(約280億円)、Naver議長イ・ヘジン氏のストックオプション価値が1685億ウォン(約151億円)に達するという記事が韓国では話題になりました。
その他、LINE上場について韓国人はこう思っているらしいです。
LINEのグローバルな成長と上場、本当におめでとうございます!
라인의 글로벌 성장과 미일 동시 상장 진심 축하드립니다! 역시 성공하면, 모든 것이 아름답게 해피엔딩이 되는군요. :) https://t.co/DiJfTZdlJj
— Channy Yun(윤석찬) (@channyun) 2016年6月13日
上場をきっかけにもっと成功する企業になってほしいです。おめでとうございます!
라인 상장으로 더 성공할 기회가 되길 빕니다. 큰 경사. 축하! https://t.co/HBaZeUDtsd
— 최우형 (Woohyong CHOI) (@woohyong) 2016年6月11日
上場の後、以前より業績に関するプレッシャーが大きくなると思うので、韓国市場の投資に力を入れるのではないかと思います。カカオトークは気が抜けない状況になることでしょう。
도쿄 증시 등판하는 라인, 예상 몸값은 6조5000억 https://t.co/e1OFH8k85Q 상장하고 나면 예전보다 실적에 대한 압박이 클텐데 한국시장에서도 라인이 공격적인 모습을 보이지 않을까 예상해 봄. 카카오는 긴장해야 할 상황.
— 임정욱 / Jungwook Lim (@estima7) 2016年6月1日
など韓国人はポジティブに受け入れている様子です。
私もLINEはメッセンジャー以外にもLINE Payや電話、ゲームまで幅広く使っていますし、韓国とも深い関係にある企業ですのでいつも応援しています。個人的には今回上場をきっかけに日本以外の国でも成功してほしいと思っています。実際、その国の文化に合わせてサービスを提供する動きもあるので、もっともっと成長する企業になるのではないかと考えています。
例えばタイでは、生活インフラとなる「LINE経済圏」を構築し、LINEマンと呼ばれる宅配人が食べ物や日用品の宅配などを行っています。
アジア圏では一定の成功を収めているものの、国際的な成長力は弱いとの見方もあります。
WSJによると、その理由は日本の「カワイイ文化」を挙げており、LINEで使われる顔文字が海外の人には幼稚に見えてしまうそうです。
最近、Facebookのメッセンジャー、Appleのメッセージ、WhatsAppも投資に力を入れているので、グローバル市場を勝ち抜くためにLINEがどう仕掛けていくのか気になります。日本に住む韓国人としては、日本発のメッセンジャーアプリLINEを応援したいです!
ちなみに弊社でもLINE Botを利用して何かできることがあるか模索中です。完成したらまたお知らせしますのでよろしくお願いします
ElasticSearchとSQLクエリの取得比較検証 - 準備編
PR TIMESの落合です。
PR TIMESに、ElasticSearchを昨年導入しました。
ElasticSearchを使用する時に、条件設定をjsonで作成しますが、
複雑な条件式を作成すると、毎回「あれ?」ってなる事が多く、SQL比較した日本語での解説ページが、あまり無い為ので、自分で検証してみました!
kuromojiなどを使用すると、検証が分かりづらくなるので、今回は導入していません。
また、ElasticSearch、MySQLのインストールや、初期設定などに関しては、今回省略していますが、要望がありましたら、別途記事で書き残していこうと思います。
まず、今回の目的としては、ElasticSearchの検証環境を整えて、簡単なクエリができる所まで解説したいと思います。
続きを読むかわいい(・∀・)人感センサーSONY製スマートDIYキット「MESH」がラブリーでキュート☆*:.。.紹介編
こんにちは☆ PR TIMES エンジニアのうさみです
少し前に人感センサーと連携したアプリをつくりたい!ということで、どう実現しようかなぁと検討しました
そもそも「人感センサー」という言葉が聞き慣れないよ・・・ という方もいらっしゃるかと思いますが、コンビニへ入店した時に鳴る音や、お家の玄関付近を通った時に点灯する明かりを想像していただけるといいかなと思います
「人が来たよ! 音を鳴らすよ!」「人が来たよ! 明かりを点けるよ!」
と、人の所在を検知するセンサーのことを人感センサーというのですね☆
まずはその人感センサー自体をどうしよう?ということで、超小型PC「Raspberry Pi」で自作する方法と、SONY製スマートDIYキット「MESH」の人感タグなるものを利用する方法のどちらかで検討しまして、後者の「MESH」を導入する方針となりました
続きを読む文系出身エンジニアから見る理系エンジニア、理系出身エンジニアから見る文系エンジニア~PR TIMES社員から特徴を分析してみた!
こんにちは。
学生時代はメディア論を専攻していたPR TIMESエンジニアの山田です。
一般的にエンジニアというと理系のイメージが強い職業ですが、PR TIMESのエンジニアは文系7人、理系3人とむしろ文系の方が多い構成となっています。
「えっ!エンジニアって理系が向いているんじゃないの?」と思う方もいらっしゃるかもしれませんが、、PR TIMESはそうでもありません。
文系の脳は「感性やコミュ力はあるが、複雑なことはよくわからない」、理系の脳は「頭脳明晰だが、理屈っぽくて論理的で、コミュ力が無い」なんて話(2秒で分かる「理系脳」「文系脳」の調べ方 - NAVER まとめ)もありますが、実際どうなんでしょう?
かくいう私山田もエンジニアチームで「文系、理系で考え方が違う」と感じていた1人。チームがお互いを理解するために、文系、理系に分かれてアンケートを取ってみました。
続きを読む中国におけるIT業界のM&A
こんにちは、私はエンジニアの呉です。
今回ご紹介したいのは技術ではなくて、2015年度中国におけるIT業界のM&A事情。
現在、中国でも毎年ものすごく数のITベンチャー企業が増えています、その中は各分野で代表の企業がアメリカのナスダックに上場し、グローバル化を果たしています。
まず中国インターネット業界のトップ10の企業を簡単に紹介します。
次はIT業界のM&Aについて紹介します。
アリババがMeizu(魅族科技)に5.9億ドルを出資した。それによって、中国のスマートフォン市場でアップル、小米科技との三國時代が現れます。
中国のクーポンサイト(美团)とグルメサイト(大众点评网)の合併。企業価値は150億ドルと予測されている。
地域の生活関連ライフサービス・プラットフォームを運営する。購入者・販売者間で製品およびサービスを提供する。住宅賃貸、求人情報、中古品、旅行、ケータリング、娯楽、共同購入情報およびサービスなどを手掛ける58同城[58ドット・コム]と赶集网の合併。
旅行業界での合併、海航旅游が途牛旅游网(NASDAQ:TOUR)に5億ドルを出資した。
携程(Ctrip.com)と去哪儿(Qunar)の合併。両者の市場価値は約170億ドル。
神州专车と運転代行サービスを展開するe代驾の合併。
ブラウザに怒られないHTTPSサーバをLet's Encryptとnginxで作る - LINE BOT APIで遊ぶ 準備編
エンジニアの深川です。
今回はLINE BOT API Trial で遊んだ内容について書こうと思っていたのですが、
LINE Developers - BOT API - Overview
LINE BOT API のCallback URLはSSL通信なので、雑なHTTPサーバを用意すればいいかなという目論みは外れて、ドメイン取得、SSL証明書の発行、WEBサーバの設定とやって、HTTPS接続可能なWEBサーバを用意する必要があります。
今回はLINE BOT API Trial を使う前段ということで、お題がSSL証明書の警告の出ないHTTPSサーバの構築について。OSはCentOS6を想定
※ 追記:LINE BOT API Trial、追加募集開始とのことです。
【LINE】「LINE BOT API Trial Account」の追加募集を開始 | LINE Corporation | ニュース
手順です。
1. ドメインの取得
2. Let's EncryptからSSL証明書の作成
3. nginxのインストールと設定
1. ドメインの取得
お名前.comとかムームードメインとかバリュードメインなどでサクッと取りましょう。
特に使い続ける必要が無いなら、linkとか安いドメインしてしまっていいと思います。ドメインを取得したら、そのままDNS AレコードをサーバのIPアドレスで登録します。
2. Let's EncryptからSSL証明書の取得
ここから本編です。
SSLの証明書の取得はLet's Encryptを利用します。Let's Encryptについては下記のリンクで確認してください。
Let's EncryptはPython2.6以下だど動かないので、その場合はPython2.7.9を入れましょう
mkdir src cd src wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz tar zxvf Python-2.7.9.tgz cd Python-2.7.9 mkdir /opt/python ./configure --prefix=/opt/python make sudo make install
古いPythonをリネームして、新しい方にPathを通します。
which python
mv /usr/bin/python /usr/bin/python_old
ln -s /opt/python/bin/python /usr/bin/python
python --version
cd ../
Pythonのバージョンを上げると、yumが動かなくなるのでyum側を修正します。
vim /usr/bin/yum
下記のように一行目を修正します。
#!/usr/bin/python_old import sys try: import yum except ImportError: print >> sys.stderr, """\ There was a problem importing one of the Python modules required to run yum. The error leading to this problem was: %s Please install a package which provides this module, or verify that the module is installed correctly. It's possible that the above module doesn't match the current version of Python, which is: %s If you cannot solve this problem yourself, please go to the yum faq at: http://wiki.linux.duke.edu/YumFaq """ % (sys.exc_value, sys.version) sys.exit(1) sys.path.insert(0, '/usr/share/yum-cli') try: import yummain yummain.user_main(sys.argv[1:], exit_code=True) except KeyboardInterrupt, e: print >> sys.stderr, "\n\nExiting on user cancel." sys.exit(1)
やっとLet's Encryptに着手できます……
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly -a standalone -d www.example.com
sudo ls -la /etc/letsencrypt/live/www.example.com
lsの結果がこんな感じなら成功です(ドメインは適宜自分のものに変更してください)
- cert.pem
- privkey.pem
- chain.pem
- fullchain.pem
3. nginxのインストールと設定
sudo yum -y insatall nginx
sudo nginx
sudo vim /etc/nginx/conf.d/default.conf
3-7行目に適合する部分を変更します。
server { listen 80 default_server; listen 443 ssl; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/www.example.com/cert.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
設定の再読み込み後、httpsで対象のドメインにアクセスできれば完了です。
sudo /etc/init.d/nginx reload
React NativeでサクッとIOSアプリを作ってみた
PR TIMESエンジニアの吉です。本日はスマートフォンアプリ開発について話したいと思います。
基本的にIOSアプリはSwiftかObjective-C、AndroidはJavaで開発しますが学習コストが必要です。シンプルなアプリあるいはプロトタイプのアプリなど早くアプリを作りたい場合はSwift、javaを使わなくても作れる方法はいろいろあります。 Monaca, PhoneGap, Titanium Mobile, React Native...
私はプロジェクト性質や開発メンバーのスキルなどを考慮してどれを選ぶのかを決めるべきたと思っています。適切な判断をするためには様々な技術を積極的に触ってみるのがいいでしょう。
このブログで紹介したいのはReact Nativeです。
開発元はfacebookでjavascriptを使ってとても簡単にアプリを開発できるのが特徴です。今年のF8イベントのアプリもReact Nativeで開発したようでダウンロードして使ってみたらすごく完成度が高いアプリでした。
ソースコードも公開されているので本格的に勉強してみたい方はぜひ中身を確認してみてください。 github.com
本ブログではReact Nativeの公式ドキュメントのチュートリアルを参考にして書きました。 instagram APIとReact Nativeを使用して簡単なIOSアプリを作ってみました。
準備
1.homebrewでファイル監視ツールのwatchmanとjavascriptチェッカーツールのflowをインストールする
brew install watchman flow
2.node4.0以上のバージョンをインストール - nvmかnodebrewを利用バージョンコントロールすることをおすすめ
3.xcode7.0以上のバージョンをインストール
セットアップ
1.react nativeのcliをインストール
npm install -g react-native-cli
2.react nativeのプロジェクトファイルを作成する
react-native init react_ios_app
上記のコマンドで生成されたreact_ios_app/index.ios.jsファイルを修正します。
ソースコードの解説
使用するコンポーネントを読み込み
import React, { AppRegistry, Component, Image, ListView, StyleSheet, Text, View, } from 'react-native';
InstagramのリクエストURLを定義
アクセストークン生成方法についてはInstagramのデベロッパーページを参照してください。
var ACCESS_TOKEN = ''; var API_URL = 'https://api.instagram.com/v1'; var PARAMS = '/users/self/media/recent/?access_token=' + ACCESS_TOKEN; var INSTAGRAM_REQUEST_URL = API_URL + PARAMS;
クラスとコンストラクタの定義
みなさんご存知のようにクラスが生成されるときに呼び出されるconstructorにリスト表示で使用するListViewのデータソースを初期化します。
class react_ios_app extends Component { constructor (props) { super(props); this.state = { dataSource: new ListView.DataSource({ rowHasChanged: (row1, row2) => row1 !== row2, }), loaded: false, }; }
componentDidMountはコンポーネントがロードされた直後に1回だけ呼び出されます。
componentDidMount() { this.fetchData(); } fetchData() { fetch(INSTAGRAM_REQUEST_URL) .then((response) => response.json()) .then((responseData) => { this.setState({ dataSource: this.state.dataSource.cloneWithRows(responseData.data), loaded: true, }); }) .done(); }
Instagram APIコール前はローディングの文字をAPIからデータ取得完了後は実データをリストに表示する処理です。
render() { if (!this.state.loaded) { return this.renderLoadingView(); } return ( <ListView dataSource={this.state.dataSource} renderRow={this.renderMovie} style={styles.listView} /> ); } renderLoadingView() { return ( <View style={styles.container}> <Text> Loading Photos ... </Text> </View> ); } renderMovie(feed) { return ( <View style={styles.container}> <Image source={{uri: feed.images.thumbnail.url}} style={styles.thumbnail} /> <View style={styles.rightContainer}> <Text style={styles.title}>{feed.caption.text}</Text> <Text style={styles.year}>{feed.caption.created_time}</Text> </View> </View> ); } }
スタイル設定
const styles = StyleSheet.create({ container: { flex: 1, flexDirection: 'row', justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', }, thumbnail: { width: 150, height: 150, }, rightContainer: { flex: 1, }, title: { fontSize: 13, marginBottom: 8, textAlign: 'center', }, year: { fontSize: 13, textAlign: 'center', }, listView: { paddingTop: 20, backgroundColor: '#F5FCFF', }, });
全てのソースコードに関しては私のGitHubに公開しました。
iosアプリをビルドする
react-native run-ios
感想
react nativeを利用するためにはreact.jsの使い方をある程度覚えないといけないことに気づきました。それにしてもswift,javaを使わずjavascriptだけで数時間でシンプルなアプリを開発できるのはすごく嬉しいですね。
使い方次第ではfacebookのf8アプリのような洗練されたアプリも開発できますし、ほぼ同じコードでIOS, Androidのアプリが同時開発できます。React Nativeは現時点でバージョン0.24です。メージャーリリースはしてないので仕事で導入するのはまだ早いと思いますが、これからもっと使いやすく高機能になると思いますのでみなさんもぜひ使ってみてはいかがでしょうか。
Chefでメール送信開発環境をサクッと作る
こんにちは!エンジニアの落合です。
前回の記事で、メール送信機能における開発環境について書かせていただきました。
開発環境なので、基本的に毎回同じものを使います。chefのようなプロビジョニングが有効的です!
具体的な詳細は、前回の記事で確認していただければと思います。
今回は、Chefで簡単に送信開発環境をできるレシピを紹介したいと思います。
fileの配置
まずは、設定ファイルをあらかじめ取得しておいて、設定変更を行い、
files/default内に配置しておきます。
今回使用するファイルは以下の通りです。
recipeの作成
それでは、recipeを作成したいと思います。
まずは、postfixを起動できる状態にして、postfixの設定を変更します。
service "postfix" do supports :status => true, :restart => true, :reload => true action [ :enable, :start ] end #postfixの設定を変更 cookbook_file "/etc/aliases.regexp" do source "aliases.regexp" mode "0644" end cookbook_file "/etc/postfix/transport_maps" do source "transport_maps" mode "0644" end cookbook_file "/etc/postfix/main.cf" do source "main.cf" mode "0644" end
次にユーザーを作成して、受信できる状態にします。
## ID catchall ## PASS catchall user "catchall" do comment "catchall" home "/home/catchall" shell "/bin/bash" password "$1$ks.iXsX.$tTErfotf/Zg2n.0zZlFxl1" supports :manage_home => true end bash "catchallsetup" do cwd catpath code <<-EOH sudo su usermod -s /bin/false catchall EOH notifies :reload, 'service[postfix]' end
最後に受信できるように受信サーバーの設定を設定を行います。
yum_package "dovecot" do action :install end cookbook_file "/etc/dovecot/dovecot.conf" do source "dovecot.conf" mode "0644" end cookbook_file "/etc/dovecot/conf.d/10-auth.conf" do source "10-auth.conf" mode "0644" end cookbook_file "/etc/dovecot/conf.d/10-mail.conf" do source "10-mail.conf" mode "0644" end directory "/home/catchall/mail/.imap/INBOX" do recursive true owner "catchall" group "catchall" action :create end
最後に、dovecotを再起動すれば完璧です!
service "dovecot" do supports :status => true, :restart => true, :reload => true action [ :enable, :restart ] end
これを行ったら、rainloop等のWEBメーラーツールを使用して、受信できるような環境を用意しましょう!
それに関しての手順は、前回の記事を参照して下さい!