ラーメンを食べて生活したい

ラーメン好きの技術ブログ

A Tour of Go 1日目

Hello World!

package main

import "fmt"

func main(){
  fmt.Println("Hello, 世界!")
}

Packages

  • Goのプログラムは、パッケージで構成される。
    プログラムはmainパッケージから開始される。
  • 以下は擬似乱数を返す。rand.Intnは同じ数を返す
package main

import (
  "fmt"
  "math/rand"
)

func main(){
  fmt.Println("My favorite number is", rand.Intn(4332))
}

Function

  • 関数は、0個以上の引数をとることができる
  • 例はadd関数int型の2つのパラメータをとる
    変数名の後ろに型名を書くことを注意
package main

import "fmt"

func add(x , y int) int {
  return x / y
}

func main(){
  fmt.Println(add(42, 13))
}

Multiple results

  • swap関数は2つのstringを返す
package main

import "fmt"

func swap(x, y string) (string, string) {
  return y, x
}

func main(){
  a, b := swap("hello", "world")
  fmt.Println(a, b)
}

Ruby on Railsでログインを実装した!(Devise未使用)

以前、Deviseを使ったログイン方法を書きましたが、今回は全く使わない方法を書きます。 ちなみに、Deviseを使った方法は簡単ですがいらない機能が出てしまうので結構めんどくさいですw

やり方

  • まず下記RubyGemを追加します。
gem 'omniauth'
gem 'omniauth-twitter'
  • /config/initializers/omniauth.rbを作成して、その中にAPIキーを入れましょう。 ここでは、APIトークンを参照しています。
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, `twitter_token`, `twitter_token_secret`
end
  • ログインのために、Userモデルを作成してください。
rails g model user provider:string uid:string user_name:string

ここのproviderでは、Twitterfacebookなどの連携先を示しています。 uidはその連携先の各個人のIDです。ちなみに、このIDでユーザを検索することができます。

  • Userモデルを記述していきます。
/app/models/user.rb
class User < ApplicationRecord
  def self.find_or_create_from_auth(auth)
    provider = auth[:provider]
    uid = auth[:uid]
    user_name = auth[:info][:user_name]

    self.find_or_create_by(provider: provider, uid: uid) do |user|
      user.user_name = user_name
    end
  end
end
  • ログイン用のコントローラーを作成します。
rails g controller sessions
  • そして、コントローラーないを記述します。
class SessionsController < ApplicationController
  def create
    user = User.find_or_create_from_auth(request.env['omniauth.auth'])
    session[:user_id] = user.id
    flash[:notice] = "ユーザー認証が完了しました。"
    redirect_to root_path
  end

  def destroy
    reset_session
    flash[:notice] = "ログアウトしました。"
    redirect_to root_path
  end
end

最後にヘルパーメソッドと、ルーティングを編集し完成です!

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  helper_method :current_user, :logged_in?

  private

  def current_user
    return unless session[:user_id]
    @current_user ||= User.find(session[:user_id])
  end

  def logged_in?
    !!session[:user_id]
  end

  def authenticate
    return if logged_in?
    redirect_to root_path, alert: "ログインしてください"
  end
end
  get '/auth/:provider/callback', to: 'sessions#create'
  get '/logout', to: 'sessions#destroy'

久しぶりすぎて全然覚えてなかった・・・

参考

qiita.com

PHP×Docker(開発環境)

昨日書いた通り勉強を始めています。

久しぶりに他の言語をやるのでワクワクしてしています。

 

開発環境ですが、Dockerを使いました。

まあ、Rubyから使ってるのでこっちの方が楽かと・・・

目次

使用したもの

 

やり方

Docker導入等は省略します

  1. PHPなのでphp7-apacheを使っていこうと思います。 コンテナをPHP+Apacheでもいいですが、勉強するだけなので同一コンテナの運用で構わないかと思います。
    DockerHub

  2. 次に学習用のディレクトリを用意しましょう。今回はphp_studyと名前ををつけました。

  3. php_studyの中にDockerfileを作成します。そして中身は以下の通りです。

 FROM php:7.2.10-apache
 
 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
 ENV TZ Asia/Tokyo
 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
 ENV LANG C.UTF-8
 WORKDIR /var/www/html
 COPY /html /var/www/html

そのあとにhtmlディレクトリを作成します。そしてその中にindex.phpを作成します。 中身は以下の通りです。

 <?php
 
   phpinfo();           

Dockerを起動して、http://0.0.0.0:80を開くと以下のページが出ると思います。 f:id:komisan19:20181008161851p:plain

Dockerの起動について

起動は毎回コマンドを打ってもいいですが、シェルやdocker-composeでまとめると便利です。 自分はsetup.shというシェルファイルを作成しました。

docker build -t php7-apache . && docker run --rm -d -p 80:80 php7-apache

まとめ

いかかですか? なんとなくhostを汚したくないなーと思って、Dockerでやりましたが 結構覚えることが多かったりするのでhostにphp+Apacheを入れてもいいのかなと思いました。

次回は、phpチュートリアルをやってみたいと思います。

PHPの学習を今更始めた話

掲題の通りです。 PHP始めました。

理由は内定先で使うからです・・・(本当はRubyがよry とりあえず、チュートリアル的なやつからやっていこうと思います。

あと、かけたらPHPの学習したものをあげていこうかなw

Ruby on RailsのERBをHamlに変更するやりかた。

はじめに

メモ用で書いてみました。 最近はHamlをよく使うようになりましたHaml。 めちゃくちゃ便利ですよねw でも、Rails newしても生成されないですよね?

そこでERBをHamlに変更してみました。

Hamlとは

What is it?
Haml (HTML abstraction markup language) is based on one primary principle: markup should be beautiful. 
It’s not just beauty for beauty’s sake either; 
Haml accelerates and simplifies template creation down to veritable haiku.

つまり、HTMLより簡潔に簡単にかけるテンプレートエンジンです。

導入について

  1. Gemfileに以下を書います。
gem 'haml-rails'

haml-railsについて

github.com

ERB→Hamlに変更することできます。

  1. bundle installをかけます。

  2. rails haml:replace_erbsをかけておしまい。

おそらくERBファイルが全て変わっていると思います。
便利なのでぜひ使ってみましょう!!!

研究室にGitLabを立てた話

お久しぶりです。

研究室にGitLabを立てたので話して行こうと思います。

導入したきっかけは?

元々研究室にはgitbucketがあったのですが、

  • 使っている人間が少なかったこと(実際使っていたのは二人)
  • メンテナンスがあまりされていなかったこと
  • あと個人的にもう少しリッチな機能が欲しい

とのことで、他のツールの検討をはじめました。

いろいろ調べているとこんな記事を見つけました。

developers.gnavi.co.jp

リッチな機能が搭載されていて、クローズな環境で動かせるGitLabってええやん
と思い早速導入を開始しました。


学生の評判は?

目的は研究室でみんな使って欲しいってことが1番の目的にしていたので、導入してからの働きかけには
だいぶ苦労しました。特に、「Gitって何?」と言った人が8割だったのでGitの基本の使い方勉強会を開いたことで 利用率もだいぶよくなったと思います。

また、通知がissueなどの通知はメールで送信されるところをslackと連携させることによって常に見る状況を作ったので だいぶ利用者が増えました。


苦労したこと

一番苦労したことは、導入ではなく運用だと思います。 貧弱なサーバで運用していたので、すぐにメモリの使用率が上昇してたことが運用する上で苦労したことです。 基本的にPrometheusと呼ばれる監視ツールがメモリを消費する原因の一つだったことがわかり現在はPrometheusを停止しています。 監視は外部のツールを使って監視するようにしています。

また、オープンソースってこともありちょくちょくバグが多いように思います。 よく、issueで「バグがある」と言った報告がありました。

現在もwikiを立てると500が出るバグあるので、公式なのかサーバの問題なのか調査する必要があると思います。

GitLabを導入したいと思っている研究室はぜひ入れてみたほうがええと思います。 でわでわ〜